From 71d7794e86bf00151871b91ef1882f8eb5135870 Mon Sep 17 00:00:00 2001 From: Romain Lenzotti Date: Sat, 5 Mar 2022 10:15:25 +0100 Subject: [PATCH] feat(prisma): add @tsed/prisma package Closes: #1389 --- .eslintignore | 1 + .github/workflows/build.yml | 13 +- .prettierignore | 1 + docs/tutorials/prisma-client.md | 61 +- docs/tutorials/prisma.md | 345 +- packages/orm/prisma/.gitignore | 1 + packages/orm/prisma/.npmignore | 5 + packages/orm/prisma/jest.config.js | 16 + packages/orm/prisma/package.json | 64 + packages/orm/prisma/readme.md | 323 + .../orm/prisma/scripts/backup-index.cjs.js | 9 + packages/orm/prisma/scripts/backup-index.d.ts | 1 + .../orm/prisma/scripts/backup-index.esm.js | 7 + .../src/__mock__/createContextFixture.ts | 23 + .../src/__mock__/createDmmfFieldFixture.ts | 31 + .../prisma/src/__mock__/createDmmfFixture.ts | 3 + .../src/__mock__/createDmmfModelFixture.ts | 5 + .../src/__mock__/createProjectFixture.ts | 49 + packages/orm/prisma/src/__mock__/dmmf.json | 15185 ++++++++++++++++ .../prisma/src/__mock__/dmmfUserModel.json | 439 + packages/orm/prisma/src/cli/dev.ts | 10 + packages/orm/prisma/src/cli/generator.ts | 12 + .../orm/prisma/src/cli/prismaGenerator.ts | 32 + packages/orm/prisma/src/generator.ts | 2 + .../prisma/src/generator/domain/DmmfEnum.ts | 42 + .../prisma/src/generator/domain/DmmfField.ts | 51 + .../prisma/src/generator/domain/DmmfModel.ts | 93 + .../src/generator/domain/ScalarTsTypes.ts | 54 + .../src/generator/domain/TransformContext.ts | 7 + .../prisma/src/generator/generateCode.spec.ts | 16 + .../orm/prisma/src/generator/generateCode.ts | 51 + .../transform/transformEnumsToEnums.spec.ts | 44 + .../transform/transformEnumsToEnums.ts | 20 + .../transformFieldToDecorators.spec.ts | 222 + .../transform/transformFieldToDecorators.ts | 69 + .../transform/transformFieldToProperty.ts | 15 + .../transform/transformModelToClass.spec.ts | 495 + .../transform/transformModelToClass.ts | 18 + .../transform/transformScalarToType.spec.ts | 100 + .../transform/transformScalarToType.ts | 43 + .../generator/utils/generateClientIndex.ts | 12 + .../src/generator/utils/generateDocuments.ts | 20 + .../src/generator/utils/generateEnums.spec.ts | 15 + .../src/generator/utils/generateEnums.ts | 24 + .../src/generator/utils/generateIndex.ts | 26 + .../src/generator/utils/generateInterfaces.ts | 31 + .../generator/utils/generateModels.spec.ts | 15 + .../src/generator/utils/generateModels.ts | 25 + .../utils/generateOutputsBarrelFile.ts | 12 + .../utils/generatePrismaService.spec.ts | 12 + .../generator/utils/generatePrismaService.ts | 88 + .../generator/utils/generateRepositories.ts | 201 + .../utils/generateRespositories.spec.ts | 22 + .../src/generator/utils/isCircularRef.spec.ts | 22 + .../src/generator/utils/isCircularRef.ts | 31 + .../parseDocumentationAttributes.spec.ts | 53 + .../utils/parseDocumentationAttributes.ts | 64 + .../prisma/src/generator/utils/removeDir.ts | 15 + .../prisma/src/generator/utils/saveProject.ts | 8 + packages/orm/prisma/src/index.ts | 1 + packages/orm/prisma/test/package-lock.json | 35 + packages/orm/prisma/test/package.json | 9 + packages/orm/prisma/test/prisma/schema.prisma | 51 + .../snapshots/generate_code/client/index.ts | 1 + .../snapshots/generate_code/enums/Role.ts | 5 + .../snapshots/generate_code/enums/index.ts | 1 + .../test/snapshots/generate_code/index.ts | 5 + .../generate_code/interfaces/index.ts | 9 + .../generate_code/models/PostModel.ts | 20 + .../generate_code/models/UserModel.ts | 65 + .../snapshots/generate_code/models/index.ts | 2 + .../repositories/PostsRepository.ts | 71 + .../repositories/UsersRepository.ts | 71 + .../generate_code/repositories/index.ts | 2 + .../generate_code/services/PrismaService.ts | 23 + .../snapshots/generate_enums/enums/Role.ts | 5 + .../generate_models/models/PostModel.ts | 20 + .../generate_models/models/UserModel.ts | 65 + .../services/PrismaService.ts | 23 + .../repositories/PostsRepository.ts | 71 + .../repositories/UsersRepository.ts | 71 + packages/orm/prisma/tsconfig.compile.esm.json | 25 + packages/orm/prisma/tsconfig.compile.json | 22 + tools/jest/jest.config.js | 1 + yarn.lock | 838 +- 85 files changed, 19875 insertions(+), 311 deletions(-) create mode 100644 packages/orm/prisma/.gitignore create mode 100644 packages/orm/prisma/.npmignore create mode 100644 packages/orm/prisma/jest.config.js create mode 100644 packages/orm/prisma/package.json create mode 100644 packages/orm/prisma/readme.md create mode 100644 packages/orm/prisma/scripts/backup-index.cjs.js create mode 100644 packages/orm/prisma/scripts/backup-index.d.ts create mode 100644 packages/orm/prisma/scripts/backup-index.esm.js create mode 100644 packages/orm/prisma/src/__mock__/createContextFixture.ts create mode 100644 packages/orm/prisma/src/__mock__/createDmmfFieldFixture.ts create mode 100644 packages/orm/prisma/src/__mock__/createDmmfFixture.ts create mode 100644 packages/orm/prisma/src/__mock__/createDmmfModelFixture.ts create mode 100644 packages/orm/prisma/src/__mock__/createProjectFixture.ts create mode 100644 packages/orm/prisma/src/__mock__/dmmf.json create mode 100644 packages/orm/prisma/src/__mock__/dmmfUserModel.json create mode 100644 packages/orm/prisma/src/cli/dev.ts create mode 100644 packages/orm/prisma/src/cli/generator.ts create mode 100644 packages/orm/prisma/src/cli/prismaGenerator.ts create mode 100644 packages/orm/prisma/src/generator.ts create mode 100644 packages/orm/prisma/src/generator/domain/DmmfEnum.ts create mode 100644 packages/orm/prisma/src/generator/domain/DmmfField.ts create mode 100644 packages/orm/prisma/src/generator/domain/DmmfModel.ts create mode 100644 packages/orm/prisma/src/generator/domain/ScalarTsTypes.ts create mode 100644 packages/orm/prisma/src/generator/domain/TransformContext.ts create mode 100644 packages/orm/prisma/src/generator/generateCode.spec.ts create mode 100644 packages/orm/prisma/src/generator/generateCode.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformEnumsToEnums.spec.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformEnumsToEnums.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformFieldToDecorators.spec.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformFieldToDecorators.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformFieldToProperty.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformModelToClass.spec.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformModelToClass.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformScalarToType.spec.ts create mode 100644 packages/orm/prisma/src/generator/transform/transformScalarToType.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateClientIndex.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateDocuments.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateEnums.spec.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateEnums.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateIndex.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateInterfaces.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateModels.spec.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateModels.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateOutputsBarrelFile.ts create mode 100644 packages/orm/prisma/src/generator/utils/generatePrismaService.spec.ts create mode 100644 packages/orm/prisma/src/generator/utils/generatePrismaService.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateRepositories.ts create mode 100644 packages/orm/prisma/src/generator/utils/generateRespositories.spec.ts create mode 100644 packages/orm/prisma/src/generator/utils/isCircularRef.spec.ts create mode 100644 packages/orm/prisma/src/generator/utils/isCircularRef.ts create mode 100644 packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.spec.ts create mode 100644 packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.ts create mode 100644 packages/orm/prisma/src/generator/utils/removeDir.ts create mode 100644 packages/orm/prisma/src/generator/utils/saveProject.ts create mode 100644 packages/orm/prisma/src/index.ts create mode 100644 packages/orm/prisma/test/package-lock.json create mode 100644 packages/orm/prisma/test/package.json create mode 100644 packages/orm/prisma/test/prisma/schema.prisma create mode 100644 packages/orm/prisma/test/snapshots/generate_code/client/index.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/enums/Role.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/enums/index.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/index.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/interfaces/index.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/models/PostModel.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/models/UserModel.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/models/index.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/repositories/PostsRepository.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/repositories/UsersRepository.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/repositories/index.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_code/services/PrismaService.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_enums/enums/Role.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_models/models/PostModel.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_models/models/UserModel.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_prisma_service/services/PrismaService.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_repositories/repositories/PostsRepository.ts create mode 100644 packages/orm/prisma/test/snapshots/generate_repositories/repositories/UsersRepository.ts create mode 100644 packages/orm/prisma/tsconfig.compile.esm.json create mode 100644 packages/orm/prisma/tsconfig.compile.json diff --git a/.eslintignore b/.eslintignore index 40eb8662f85..c8bc82b5326 100644 --- a/.eslintignore +++ b/.eslintignore @@ -9,3 +9,4 @@ docs-references *-lock.json *.lock benchmarks.* +**/generated diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 32ca3ed19d8..60d63e75e8a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -124,7 +124,7 @@ jobs: - name: Run benchmarks run: yarn benchmarks - uses: actions/github-script@v4 - if: ${{ github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork }} + if: github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork with: github-token: ${{secrets.GITHUB_TOKEN}} script: | @@ -143,7 +143,12 @@ jobs: deploy-packages: runs-on: ubuntu-latest needs: [lint, test, test-packages, build] - if: ${{ github.event_name != 'pull_request' && (contains(github.ref, 'production') || contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc')) }} + if: github.event_name != 'pull_request' && contains(' + refs/heads/production + refs/heads/alpha + refs/heads/beta + refs/heads/rc + ', github.ref) strategy: matrix: @@ -167,8 +172,6 @@ jobs: publish-docs: runs-on: ubuntu-latest needs: deploy-packages - if: ${{ github.event_name != 'pull_request' && (contains(github.ref, 'production') || contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc')) }} - strategy: matrix: node-version: [16.x] @@ -196,8 +199,6 @@ jobs: publish-refs: runs-on: ubuntu-latest needs: deploy-packages - if: ${{ github.event_name != 'pull_request' && (contains(github.ref, 'production') || contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc')) }} - strategy: matrix: node-version: [16.x] diff --git a/.prettierignore b/.prettierignore index 60d0db0bba9..f126d90b91f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,3 +7,4 @@ node_modules *-lock.json *.lock benchmarks.* +**/generated diff --git a/docs/tutorials/prisma-client.md b/docs/tutorials/prisma-client.md index c0fba4d9ccd..1e68917d15a 100644 --- a/docs/tutorials/prisma-client.md +++ b/docs/tutorials/prisma-client.md @@ -12,70 +12,19 @@ projects: # Ts.ED Prisma client - - -Ts.ED Prisma client is only available for [premium sponsors](https://tsed.io/support.html). - -- You can read the modalities [here](https://github.com/sponsors/Romakita), -- Or get your prisma client access ticket [here](https://github.com/sponsors/Romakita/sponsorships?sponsor=Romakita&tier_id=69644&preview=false). - -Then contact the [Ts.ED team](https://api.tsed.io/rest/slack/tsedio/tsed) on Slack so that we add it to the private repository. - -## Why should I paid for the package +## Features Prisma Client generate only TypeScript interfaces based on the Prisma schema. Because, interfaces have no consistency in JavaScript, isn't possible to infer a Json Schema and therefore generate the Swagger documentation or perform validation on the models (without manually writing code). -The Ts.ED Prisma will generates classes and enums compatible with Ts.ED decorators like @@Returns@@ but also, but it will also generate the `PrismaService` (connection to the database) but also the **repositories** for each **model** of your Prisma schema. - -## Install the package from Github - -Ask Ts.ED team on [Slack](https://api.tsed.io/slack/tsedio/tsed) to get a unique personal GH_TOKEN. - -Then add on your project (or on profile level) a `.npmrc` file with the following content: - -``` -@tsedio:registry=https://npm.pkg.github.com -//npm.pkg.github.com/:_authToken=GH_TOKEN -``` - -Replace the `GH_TOKEN` by your token or by `${GH_TOKEN}` if you want to use env variable. +The `@tsed/prisma` will generates classes and enums compatible with Ts.ED decorators like @@Returns@@ but also, but it will also generate the `PrismaService` (connection to the database) but also the **repositories** for each **model** of your Prisma schema. -If you use yarn (v1), you can also add a `.yarnrc` with the following content: - -``` -"@tsedio:registry" "https://npm.pkg.github.com/tsedio" -``` - -Then add the package to you package.json: - -```json -{ - "name": "@project/server", - "version": "1.0.0", - "description": "A Server based on Ts.ED", - "main": "index.js", - "author": "", - "license": "MIT", - "dependencies": { - "@tsedio/prisma": "1.0.3" - } -} -``` - -Furthermore, `@tsedio/prisma` requires Prisma 2 to work properly, so please install Prisma dependencies if you don't have it already installed: +## Installation ```sh npm i -D prisma -npm i @prisma/client +npm i @tsed/prisma @prisma/client ``` -::: warning -Be aware that `@tsedio/prisma` is designed to work with a selected version of `prisma`. - -Please make sure you use `prisma` and `@prisma/client` with version matching `~2.22.0`. -Otherwise, the runtime check will report an error when you run the generator. -::: - ## Configuration After installation, you need to update your `schema.prisma` file and then add a new generator section below the `client` one: @@ -102,7 +51,7 @@ generator tsed { ``` By default, when the output path contains `node_modules`, the generated code is transpiled - containing `*.js` and `*.d.ts` files that are ready to use (import) in your code. -However, if you explicitly choose an other folder in `output` config, the generated code will be emitted as raw TS files which you can use and import as your other source code files. +However, if you explicitly choose another folder in `output` config, the generated code will be emitted as raw TS files which you can use and import as your other source code files. You can overwrite that by explicitly setting `emitTranspiledCode` config option: diff --git a/docs/tutorials/prisma.md b/docs/tutorials/prisma.md index f2afdbb5078..9273e564239 100644 --- a/docs/tutorials/prisma.md +++ b/docs/tutorials/prisma.md @@ -29,15 +29,6 @@ If you want to get a quick overview of how Prisma works, you can follow the [Qui -## Prisma generator for Ts.ED - -If you are a premium sponsor, or you want to become one, you can ask [Ts.ED team](https://api.tsed.io/rest/slack/tsedio/tsed) to get your access to the private packages [`@tsedio/prisma`](/tutorials/prisma-client.md). - -This package generates enums, and classes compatible with the Ts.ED decorators like @@Returns@@ and extends possibilities about the `prisma.schema`. -It also generates PrismaService and Repositories! - -You should follow this tutorial to create your project properly. You will have more details regarding the installation of the [`@tsedio/prisma`](/tutorials/prisma-client.md) package. - ## Getting started In this tutorial, you'll learn how to get started with Ts.ED and Prisma from scratch. @@ -60,7 +51,15 @@ npm install -g @tsed/cli tsed init tsed-prisma ``` -From the CLI, select the following features: Swagger, Eslint, Jest. +From the CLI, select the following features: Swagger, Eslint, Jest, ORM > Prisma. + +The `@tsed/prisma` will be automatically installed. This package generates `enums` and `classes` compatible with the Ts.ED decorators like @@Returns@@ and extends possibilities about the `prisma.schema`. +It also generates `PrismaService` and `Repositories`! + +::: tip +You can become a sponsor and help us to improve this module. A dedicated tiers is available on Github sponsors [here](https://github.com/sponsors/Romakita/sponsorships?sponsor=Romakita&tier_id=69644&preview=false). +By choosing this options, your feature/fix request treated in top priority. +::: ## Set up Prisma @@ -103,6 +102,10 @@ datasource db { generator client { provider = "prisma-client-js" } + +generator tsed { + provider = "tsed-prisma" +} ``` Now, open up `.env` and adjust the `DATABASE_URL` environment variable to look as follows: @@ -177,6 +180,44 @@ Replace the placeholders spelled in all uppercase letters with your database cre +## Prisma client configuration + +After installation, you need to update your `schema.prisma` file and then add a new generator section below the `client` one: + +```groovy +generator client { + // ... +} + +generator tsed { + provider = "tsed-prisma" +} +``` + +Then after running `npx prisma generate`, this will emit the generated Ts.ED classes and Enums to `@tsedio/prisma/.schema` in `node_modules` folder. + +You can also configure the default output folder, e.g.: + +```groovy +generator tsed { + provider = "tsed-prisma" + output = "../prisma/generated/tsed" +} +``` + +By default, when the output path contains `node_modules`, the generated code is transpiled - containing `*.js` and `*.d.ts` files that are ready to use (import) in your code. +However, if you explicitly choose another folder in `output` config, the generated code will be emitted as raw TS files which you can use and import as your other source code files. + +You can overwrite that by explicitly setting `emitTranspiledCode` config option: + +```groovy +generator tsed { + provider = "tsed-prisma" + output = "../prisma/generated/tsed" + emitTranspiledCode = true +} +``` + #### Create two database tables with Prisma Migrate In this section, you'll create two new tables in your database using [Prisma Migrate](https://www.prisma.io/docs/concepts/components/prisma-migrate). @@ -269,124 +310,236 @@ Add the previous command to your `scripts` in the `package.json`: ::: -## Configure Ts.ED prisma client +## Generate Models and Repositories -Now our `prisma.schema` is ready for the basic usage. It's time to configure [`@tsedio/prisma`](/tutorials/prisma-client.md). +By using the Prisma client and the `@tsed/prisma` module, you'll be able to generate models, enums and repositories each time you use the following command: -See our dedicated guide [here](/tutorials/prisma-client.md). +```sh +npm run prisma:generate +``` -The client will generate all enums, classes, repositories and PrismaService for the Ts.ED framework! +`@tsed/prisma` let you adding extra decorators on your datamodel property to generate the Ts.ED model. +Here is an example of Prisma datamodel with some decorators: -## Create the PrismaService and PostService +```groovy +model User { + /// @TsED.Groups("!creation") + /// Comment + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + /// @TsED.Email() + /// @TsED.Description("User email. This email must be unique!") + email String @unique + weight Float? + is18 Boolean? + name String? + successorId Int? + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") + role Role @default(USER) + posts Post[] + keywords String[] + biography Json + /// @TsED.Ignore(ctx.endpoint === true) + ignored String +} -You're now able to send database queries with Prisma Client. If you want to learn more about building queries with Prisma Client, -check out the [API documentation](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/crud). +model Post { + id Int @id @default(autoincrement()) + user User? @relation(fields: [userId], references: [id]) + userId Int? +} -When setting up your Ts.ED application, you'll want to abstract away the Prisma Client API for database queries within a service. -To get started, you can create a new `PrismaService` that takes care of instantiating `PrismaClient` and connecting to your database. +enum Role { + USER + ADMIN +} +``` -Inside the `src/services` directory, create a new file called `PrismaService.ts` and add the following code to it: +Based on our previous example, Prisma Client will generate the following UserModel: ```typescript -import {Injectable, OnInit, OnDestroy} from "@tsed/common"; -import {PrismaClient} from "@prisma/client"; - -@Injectable() -export class PrismaService extends PrismaClient implements OnInit, OnDestroy { - async $onInit() { - await this.$connect(); - } - - async $onDestroy() { - await this.$disconnect(); - } +import {User} from "../client"; +import {Integer, Required, Property, Groups, Format, Email, Description, Allow, Enum, CollectionOf} from "@tsed/schema"; +import {Role} from "../enums"; +import {PostModel} from "./PostModel"; + +export class UserModel implements User { + @Property(Number) + @Integer() + @Required() + @Groups("!creation") + id: number; + + @Property(Date) + @Format("date-time") + @Required() + createdAt: Date; + + @Property(String) + @Required() + @Email() + @Description("User email. This email must be unique!") + email: string; + + @Property(Number) + @Allow(null) + weight: number | null; + + @Property(Boolean) + @Allow(null) + is18: boolean | null; + + @Property(String) + @Allow(null) + name: string | null; + + @Property(Number) + @Integer() + @Allow(null) + successorId: number | null; + + @Property(() => UserModel) + @Allow(null) + predecessor: UserModel | null; + + @Required() + @Enum(Role) + role: Role; + + @CollectionOf(() => PostModel) + @Required() + posts: PostModel[]; + + @CollectionOf(String) + @Required() + keywords: string[]; + + @Property(Object) + @Required() + biography: any; + + @TsED.Ignore((value: any, ctx: any) => ctx.endpoint === true) + ignored: string; } ``` -## Create UserService - -Next, you can write services that you can use to make database calls for the `User` and `Post` models from your Prisma schema. - -Still inside the `src/services` directory, create a new file called `UsersRepository.ts` and add the following code to it: +And, the following repository: ```typescript -import {Inject, Injectable} from "@tsed/di"; -import {Prisma, User} from "@prisma/client"; -import {PrismaService} from "./PrismaService"; +import {isArray} from "@tsed/core"; +import {deserialize} from "@tsed/json-mapper"; +import {Injectable, Inject} from "@tsed/di"; +import {PrismaService} from "../services/PrismaService"; +import {Prisma, User} from "../client"; +import {UserModel} from "../models"; @Injectable() -export class UserRepository { +export class UsersRepository { @Inject() - prisma: PrismaService; + protected prisma: PrismaService; - async findUnique(args: Prisma.UserFindUniqueArgs): Promise { - return this.prisma.user.findUnique(args); + get collection() { + return this.prisma.user; } - async findMany(args?: Prisma.UserFindManyArgs): Promise { - return this.prisma.user.findMany(args); + get groupBy() { + return this.collection.groupBy.bind(this.collection); } - async create(args: Prisma.UserCreateArgs): Promise { - return this.prisma.user.create(args); + protected deserialize(obj: null | User | User[]): T { + return deserialize(obj, {type: UserModel, collectionType: isArray(obj) ? Array : undefined}); } - async update(args: Prisma.UserUpdateArgs): Promise { - return this.prisma.user.update(args); + async findUnique(args: Prisma.UserFindUniqueArgs): Promise { + const obj = await this.collection.findUnique(args); + return this.deserialize(obj); } - async delete(args: Prisma.UserDeleteArgs): Promise { - return this.prisma.user.delete(args); + async findFirst(args: Prisma.UserFindFirstArgs): Promise { + const obj = await this.collection.findFirst(args); + return this.deserialize(obj); } -} -``` - -Notice how you're using Prisma Client's generated types to ensure that the methods that are exposed by your service are properly typed. -You therefore save the boilerplate of typing your models and creating additional interface or DTO files. -Now do the same for the `Post` model. - -Still inside the `src` directory, create a new file called `PostsRepository.ts` and add the following code to it: + async findMany(args?: Prisma.UserFindManyArgs): Promise { + const obj = await this.collection.findMany(args); + return this.deserialize(obj); + } -```typescript -import {Post, Prisma} from "@prisma/client"; -import {Inject, Injectable} from "@tsed/di"; -import {PrismaService} from "./PrismaService"; + async create(args: Prisma.UserCreateArgs): Promise { + const obj = await this.collection.create(args); + return this.deserialize(obj); + } -@Injectable() -export class PostsRepository { - @Inject() - prisma: PrismaService; + async update(args: Prisma.UserUpdateArgs): Promise { + const obj = await this.collection.update(args); + return this.deserialize(obj); + } - async findUnique(args: Prisma.PostFindUniqueArgs): Promise { - return this.prisma.post.findUnique(args); + async upsert(args: Prisma.UserUpsertArgs): Promise { + const obj = await this.collection.upsert(args); + return this.deserialize(obj); } - async findMany(args?: Prisma.PostFindManyArgs): Promise { - return this.prisma.post.findMany(args); + async delete(args: Prisma.UserDeleteArgs): Promise { + const obj = await this.collection.delete(args); + return this.deserialize(obj); } - async create(args: Prisma.PostCreateArgs): Promise { - return this.prisma.post.create(args); + async deleteMany(args: Prisma.UserDeleteManyArgs) { + return this.collection.deleteMany(args); } - async update(args: Prisma.PostUpdateArgs): Promise { - return this.prisma.post.update(args); + async updateMany(args: Prisma.UserUpdateManyArgs) { + return this.collection.updateMany(args); } - async delete(args: Prisma.PostDeleteArgs): Promise { - return this.prisma.post.delete(args); + async aggregate(args: Prisma.UserAggregateArgs) { + return this.collection.aggregate(args); } } ``` -Your `UsersRepository` and `PostsRepository` currently wrap the CRUD queries that are available in Prisma Client. -In a real world application, the service would also be the place to add business logic to your application. -For example, you could have a method called `updatePassword` inside the `UsersRepository` that would be responsible for updating the password of a user. +It will be the same for all the models that you declare in the `schema.prisma`! + +### Ts.ED decorators usage in Prisma + +The generator parse prisma command to find extra Ts.ED decorators. You can use any `@tsed/schema` decorators from Ts.ED by +adding a comment with the following format `/// @TsED.Decorator`. See example above: + +```groovy +model User { + /// @TsED.Groups("!creation") + /// Comment + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + /// @TsED.Email() + /// @TsED.Description("User email. This email must be unique!") + email String @unique +} +``` + +Output: + +```typescript +export class UserModel implements User { + @Property(Number) + @Integer() + @Required() + @Groups("!creation") + id: number; + + @Property(String) + @Required() + @Email() + @Description("User email. This email must be unique!") + email: string; +} +``` ## Create controllers -Finally, you'll use the services you created in the previous sections to implement the different routes of your app. +Finally, you'll use the repository you generated in the previous sections to implement the different routes of your app. Now we have to create controllers to expose your business to our consumers. So create the following controllers in `src/controllers` directory: @@ -397,9 +550,7 @@ Now we have to create controllers to expose your business to our consumers. So c import {BodyParams, Controller, Get, Post} from "@tsed/common"; import {Inject} from "@tsed/di"; import {Groups, Returns, Summary} from "@tsed/schema"; -import {UserModel, UsersRepository} from "@tsedio/prisma"; - -// import {UsersRepository} from "../services/UsersRepository"; +import {UserModel, UsersRepository} from "@tsed/prisma"; @Controller("/users") export class UsersController { @@ -430,9 +581,7 @@ import {BodyParams, Controller, Delete, Get, PathParams, Post, Put} from "@tsed/ import {Inject} from "@tsed/di"; import {Description, Groups, Name, Returns, Summary} from "@tsed/schema"; import {NotFound} from "@tsed/exceptions"; -import {PostModel, PostsRepository} from "@tsedio/prisma"; - -// OR import {PostsRepository} from "../../services/PostsRepository"; +import {PostModel, PostsRepository} from "@tsed/prisma"; @Controller("/posts") @Name("Posts") @@ -512,9 +661,8 @@ export class PostsController { ```typescript import {Controller, Get} from "@tsed/common"; import {Inject} from "@tsed/di"; -import {PostModel, PostsRepository} from "@tsedio/prisma"; +import {PostModel, PostsRepository} from "@tsed/prisma"; import {Returns, Summary} from "@tsed/schema"; -// import {PostsRepository} from "../services/PostsRepository"; @Controller("/feeds") export class FeedsController { @@ -537,7 +685,22 @@ export class FeedsController { Now start the server and open the Swagger documentation to test your REST API! +## Inject PrismaService + +`@tsed/prisma` package generate also the `PrismaService`. You can inject this service as following: + +```typescript +import {Injectable, Inject} from "@tsed/di"; +import {PrismaService} from "@tsed/prisma"; + +@Injectable() +export class MyService { + @Inject() + protected prisma: PrismaService; +} +``` + ### Summary In this tutorial, you learned how to use Prisma along with Ts.ED to implement a REST API. -The controller implementing the routes of the API is calling a `PrismaService` which in turn uses Prisma Client to send queries to a database to fulfill the data needed by incoming requests. +The controller implementing the routes of the API is calling our Repositories generated with the Prisma Client and uses the generated PrismaService to interact with the database. diff --git a/packages/orm/prisma/.gitignore b/packages/orm/prisma/.gitignore new file mode 100644 index 00000000000..43001c44500 --- /dev/null +++ b/packages/orm/prisma/.gitignore @@ -0,0 +1 @@ +test/prisma/generated \ No newline at end of file diff --git a/packages/orm/prisma/.npmignore b/packages/orm/prisma/.npmignore new file mode 100644 index 00000000000..c960ffbd3e9 --- /dev/null +++ b/packages/orm/prisma/.npmignore @@ -0,0 +1,5 @@ +src +test +tsconfig.compile.json +tsconfig.json +jest.config.js \ No newline at end of file diff --git a/packages/orm/prisma/jest.config.js b/packages/orm/prisma/jest.config.js new file mode 100644 index 00000000000..817a5efb7b2 --- /dev/null +++ b/packages/orm/prisma/jest.config.js @@ -0,0 +1,16 @@ +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + ...require("@tsed/jest-config")(__dirname, "prisma"), + coverageThreshold: { + global: { + branches: 87.22, + functions: 92.42, + lines: 96.25, + statements: 92.42 + } + } +}; diff --git a/packages/orm/prisma/package.json b/packages/orm/prisma/package.json new file mode 100644 index 00000000000..111e1deb386 --- /dev/null +++ b/packages/orm/prisma/package.json @@ -0,0 +1,64 @@ +{ + "name": "@tsed/prisma", + "version": "6.103.3", + "description": "Generate Ts.ED JsonSchema based on Prisma models", + "source": "./src/index.ts", + "main": "./lib/cjs/index.js", + "module": "./lib/esm/index.js", + "typings": "./lib/types/index.d.ts", + "exports": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/cjs/index.js", + "default": "./lib/esm/index.js" + }, + "bin": { + "tsed-prisma": "lib/cjs/generator.js" + }, + "scripts": { + "build": "rm -rf lib && yarn run build:esm && yarn run build:cjs && yarn run copy", + "build:cjs": "tsc --build tsconfig.compile.json", + "build:esm": "tsc --build tsconfig.compile.esm.json", + "test": "cross-env NODE_ENV=test yarn jest", + "copy": "cp scripts/backup-index.cjs.js lib/cjs/index.js && cp scripts/backup-index.esm.js lib/esm/index.js && cp scripts/backup-index.d.ts lib/types/index.d.ts", + "prepare": "cp scripts/backup-index.cjs.js lib/cjs/index.js && cp scripts/backup-index.esm.js lib/esm/index.js && cp scripts/backup-index.d.ts lib/types/index.d.ts", + "generate": "cd test && prisma -v && prisma generate" + }, + "private": false, + "dependencies": { + "@prisma/generator-helper": "^3.10.0", + "@prisma/sdk": "^3.10.0", + "change-case": "^4.1.2", + "pluralize": "^8.0.0", + "ts-morph": "^12.0.0", + "tslib": "^2.3.1" + }, + "devDependencies": { + "@prisma/client": "^3.10.0", + "@tsed/core": "6.103.3", + "@tsed/di": "6.103.3", + "@tsed/json-mapper": "6.103.3", + "@tsed/schema": "6.103.3", + "@types/change-case": "^2.3.1", + "@types/pluralize": "0.0.29", + "prisma": "^3.10.0" + }, + "peerDependencies": { + "@prisma/client": "^2 || ^3", + "@tsed/core": "^6.103.3", + "@tsed/di": "^6.103.3", + "@tsed/json-mapper": "^6.103.3", + "@tsed/schema": "^6.103.3" + }, + "keywords": [ + "TypeScript", + "decorators", + "models", + "json schema", + "JsonSchema", + "class", + "classes", + "tsed", + "prisma" + ] +} diff --git a/packages/orm/prisma/readme.md b/packages/orm/prisma/readme.md new file mode 100644 index 00000000000..6731bea0533 --- /dev/null +++ b/packages/orm/prisma/readme.md @@ -0,0 +1,323 @@ +

+ Ts.ED logo +

+ +
+ +

Ts.ED Prisma

+ +[![Build & Release](https://github.com/tsedio/tsed/actions/workflows/build.yml/badge.svg)](https://github.com/tsedio/tsed/actions/workflows/build.yml) +[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) +[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) +[![backers](https://opencollective.com/tsed/tiers/badge.svg)](https://opencollective.com/tsed) + +
+ +
+ Website +   •   + Tutorial +   •   + Slack +   •   + Twitter +
+ +
+ +## Installation + +```sh +npm i -D prisma +npm i @tsed/prisma @prisma/client +``` + +## Configuration + +After installation, you need to update your `schema.prisma` file and then add a new generator section below the `client` one: + +```prisma +generator client { + // ... +} + +generator tsed { + provider = "@tsed/prisma" +} +``` + +Then after running `npx prisma generate`, this will emit the generated Ts.ED classes and Enums to `@tsed/prisma/.schema` in `node_modules` folder. + +You can also configure the default output folder, e.g.: + +```prisma +generator tsed { + provider = "@tsed/prisma" + output = "../prisma/generated/tsed" +} +``` + +By default, when the output path contains `node_modules`, the generated code is transpiled - containing `*.js` and `*.d.ts` files that are ready to use (import) in your code. +However, if you explicitly choose an other folder in `output` config, the generated code will be emitted as raw TS files which you can use and import as your other source code files. + +You can overwrite that by explicitly setting `emitTranspiledCode` config option: + +```prisma +generator tsed { + provider = "@tsed/prisma" + output = "../prisma/generated/tsed" + emitTranspiledCode = true +} +``` + +## Usage + +Given that you have this part of datamodel definitions: + +```groovy +model User { + /// @TsED.Groups("!creation") + /// Comment + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + /// @TsED.Email() + /// @TsED.Description("User email. This email must be unique!") + email String @unique + weight Float? + is18 Boolean? + name String? + successorId Int? + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") + role Role @default(USER) + posts Post[] + keywords String[] + biography Json + + /// @TsED.Ignore(ctx.endpoint === true) + ignored String +} + +model Post { + id Int @id @default(autoincrement()) + user User? @relation(fields: [userId], references: [id]) + userId Int? +} + +enum Role { + USER + ADMIN +} +``` + +it will generate the following UserModel: + +```typescript +import {Integer, Required, Property, Groups, Format, Email, Description, Allow, Enum, CollectionOf} from "@tsed/schema"; +import {User} from "../client"; +import {Role} from "../enums"; +import {PostModel} from "./PostModel"; + +export class UserModel implements User { + @Property(Number) + @Integer() + @Required() + @Groups("!creation") + id: number; + + @Property(Date) + @Format("date-time") + @Required() + createdAt: Date; + + @Property(String) + @Required() + @Email() + @Description("User email. This email must be unique!") + email: string; + + @Property(Number) + @Allow(null) + weight: number | null; + + @Property(Boolean) + @Allow(null) + is18: boolean | null; + + @Property(String) + @Allow(null) + name: string | null; + + @Property(Number) + @Integer() + @Allow(null) + successorId: number | null; + + @Property(() => UserModel) + @Allow(null) + predecessor: UserModel | null; + + @Required() + @Enum(Role) + role: Role; + + @CollectionOf(() => PostModel) + @Required() + posts: PostModel[]; + + @CollectionOf(String) + @Required() + keywords: string[]; + + @Property(Object) + @Required() + biography: any; + + @Ignore((value: any, ctx: any) => ctx.endpoint === true) + ignored: string; +} +``` + +And, the following repository: + +```typescript +import {isArray} from "@tsed/core"; +import {deserialize} from "@tsed/json-mapper"; +import {Injectable, Inject} from "@tsed/di"; +import {PrismaService} from "../services/PrismaService"; +import {Prisma, User} from "../client"; +import {UserModel} from "../models"; + +@Injectable() +export class UsersRepository { + @Inject() + protected prisma: PrismaService; + + get collection() { + return this.prisma.user; + } + + get groupBy() { + return this.collection.groupBy.bind(this.collection); + } + + protected deserialize(obj: null | User | User[]): T { + return deserialize(obj, {type: UserModel, collectionType: isArray(obj) ? Array : undefined}); + } + + async findUnique(args: Prisma.UserFindUniqueArgs): Promise { + const obj = await this.collection.findUnique(args); + return this.deserialize(obj); + } + + async findFirst(args: Prisma.UserFindFirstArgs): Promise { + const obj = await this.collection.findFirst(args); + return this.deserialize(obj); + } + + async findMany(args?: Prisma.UserFindManyArgs): Promise { + const obj = await this.collection.findMany(args); + return this.deserialize(obj); + } + + async create(args: Prisma.UserCreateArgs): Promise { + const obj = await this.collection.create(args); + return this.deserialize(obj); + } + + async update(args: Prisma.UserUpdateArgs): Promise { + const obj = await this.collection.update(args); + return this.deserialize(obj); + } + + async upsert(args: Prisma.UserUpsertArgs): Promise { + const obj = await this.collection.upsert(args); + return this.deserialize(obj); + } + + async delete(args: Prisma.UserDeleteArgs): Promise { + const obj = await this.collection.delete(args); + return this.deserialize(obj); + } + + async deleteMany(args: Prisma.UserDeleteManyArgs) { + return this.collection.deleteMany(args); + } + + async updateMany(args: Prisma.UserUpdateManyArgs) { + return this.collection.updateMany(args); + } + + async aggregate(args: Prisma.UserAggregateArgs) { + return this.collection.aggregate(args); + } +} +``` + +## Add Ts.ED decorator + +The generator parse prisma command to find extra Ts.ED decorators. You can use any `@tsed/schema` decorators from Ts.ED by +adding a comment with the following format `/// @TsED.Decorator`. See example above: + +```prisma +model User { + /// @TsED.Groups("!creation") + /// Comment + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + /// @TsED.Email() + /// @TsED.Description("User email. This email must be unique!") + email String @unique + /// @TsED.Ignore(ctx.endpoint === true) + ignored String +} +``` + +Output: + +```typescript +export class UserModel implements User { + @Property(Number) + @Integer() + @Required() + @Groups("!creation") + id: number; + + @Property(String) + @Required() + @Email() + @Description("User email. This email must be unique!") + email: string; + + @TsED.Ignore((value: any, ctx: any) => ctx.endpoint === true) + ignored: string; +} +``` + +## Contributors + +Please read [contributing guidelines here](https://tsed.io/CONTRIBUTING.html) + + + +## Backers + +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/tsed#backer)] + + + +## Sponsors + +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/tsed#sponsor)] + +## License + +The MIT License (MIT) + +Copyright (c) 2016 - 2021 Romain Lenzotti + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/orm/prisma/scripts/backup-index.cjs.js b/packages/orm/prisma/scripts/backup-index.cjs.js new file mode 100644 index 00000000000..5b25a20da5c --- /dev/null +++ b/packages/orm/prisma/scripts/backup-index.cjs.js @@ -0,0 +1,9 @@ +const tsed = require("../.schema"); +const path = require("path"); + +module.exports = tsed; + +/** + * Annotation for ncc/zeit + */ +path.join(__dirname, "../.schema"); diff --git a/packages/orm/prisma/scripts/backup-index.d.ts b/packages/orm/prisma/scripts/backup-index.d.ts new file mode 100644 index 00000000000..f4aa627148f --- /dev/null +++ b/packages/orm/prisma/scripts/backup-index.d.ts @@ -0,0 +1 @@ +export * from "../.schema"; diff --git a/packages/orm/prisma/scripts/backup-index.esm.js b/packages/orm/prisma/scripts/backup-index.esm.js new file mode 100644 index 00000000000..755d23c819e --- /dev/null +++ b/packages/orm/prisma/scripts/backup-index.esm.js @@ -0,0 +1,7 @@ +import path from "path"; +export * from "../.schema"; + +/** + * Annotation for ncc/zeit + */ +path.join(__dirname, "../.schema"); diff --git a/packages/orm/prisma/src/__mock__/createContextFixture.ts b/packages/orm/prisma/src/__mock__/createContextFixture.ts new file mode 100644 index 00000000000..c05326d9658 --- /dev/null +++ b/packages/orm/prisma/src/__mock__/createContextFixture.ts @@ -0,0 +1,23 @@ +import {TransformContext} from "../generator/domain/TransformContext"; + +export function createContextFixture(): TransformContext { + return { + modelsMap: new Map() + .set("User", { + name: "User", + fields: [{type: "Role"}] + }) + .set("Role", { + name: "Role", + fields: [{type: "User"}, {type: "Transitive"}] + }) + .set("Transitive", { + name: "Transitive", + fields: [{type: "String"}, {type: "User"}] + }) + .set("Hello", { + name: "Hello", + fields: [{type: "String"}, {type: "User"}] + }) + } as any; +} diff --git a/packages/orm/prisma/src/__mock__/createDmmfFieldFixture.ts b/packages/orm/prisma/src/__mock__/createDmmfFieldFixture.ts new file mode 100644 index 00000000000..393d0b00092 --- /dev/null +++ b/packages/orm/prisma/src/__mock__/createDmmfFieldFixture.ts @@ -0,0 +1,31 @@ +import {DmmfField} from "../generator/domain/DmmfField"; + +export interface FieldFixtureOptions { + kind: string; + name: string; + isRequired: boolean; + isNullable: boolean; + type: string; + isList: boolean; + documentation: string; + isInputType: boolean; +} + +export function createDmmfFieldFixture(options: Partial = {}) { + return new DmmfField({ + field: { + name: "user", + isRequired: false, + type: "User", + isList: false, + ...options + }, + schemaArg: { + ...options + }, + model: { + isInputType: options.isInputType, + addImportDeclaration: jest.fn() + } + }); +} diff --git a/packages/orm/prisma/src/__mock__/createDmmfFixture.ts b/packages/orm/prisma/src/__mock__/createDmmfFixture.ts new file mode 100644 index 00000000000..f7bf5b6144a --- /dev/null +++ b/packages/orm/prisma/src/__mock__/createDmmfFixture.ts @@ -0,0 +1,3 @@ +export function createDmmfFixture() { + return require("./dmmf.json"); +} diff --git a/packages/orm/prisma/src/__mock__/createDmmfModelFixture.ts b/packages/orm/prisma/src/__mock__/createDmmfModelFixture.ts new file mode 100644 index 00000000000..86e98158a4b --- /dev/null +++ b/packages/orm/prisma/src/__mock__/createDmmfModelFixture.ts @@ -0,0 +1,5 @@ +import {DmmfModel} from "../generator/domain/DmmfModel"; + +export function createDmmfModelFixture() { + return new DmmfModel(require("./dmmfUserModel.json")); +} diff --git a/packages/orm/prisma/src/__mock__/createProjectFixture.ts b/packages/orm/prisma/src/__mock__/createProjectFixture.ts new file mode 100644 index 00000000000..e3513026780 --- /dev/null +++ b/packages/orm/prisma/src/__mock__/createProjectFixture.ts @@ -0,0 +1,49 @@ +import {ModuleKind, Project, ScriptTarget} from "ts-morph"; +import {ensureDirSync, existsSync} from "fs-extra"; +import {dirname, join} from "path"; +import {readFileSync, writeFileSync} from "fs"; + +const SNAPSHOT_DIR = `${__dirname}/../../test/snapshots`; + +export function createProjectFixture(dir = "/") { + const baseDir = join(SNAPSHOT_DIR, dir); + const project = new Project({ + compilerOptions: { + target: ScriptTarget.ES2019, + module: ModuleKind.CommonJS, + emitDecoratorMetadata: true, + experimentalDecorators: true, + esModuleInterop: true + } + }); + + return { + project, + baseDir, + render(file: string) { + const absolutePath = join(baseDir, file); + const sourceFile = project.getSourceFile(absolutePath); + + if (!sourceFile) { + throw `File not found: ${file}`; + } + + sourceFile.formatText({indentSize: 2}); + const actualValue = sourceFile.getFullText(); + + if (!existsSync(absolutePath)) { + ensureDirSync(dirname(absolutePath)); + writeFileSync(absolutePath, actualValue, {encoding: "utf8"}); + } + + const expectedValue = readFileSync(absolutePath, {encoding: "utf8"}); + + return { + ...expect(actualValue), + toEqualSnapshot() { + expect(actualValue).toEqual(expectedValue); + } + }; + } + }; +} diff --git a/packages/orm/prisma/src/__mock__/dmmf.json b/packages/orm/prisma/src/__mock__/dmmf.json new file mode 100644 index 00000000000..262bb053a82 --- /dev/null +++ b/packages/orm/prisma/src/__mock__/dmmf.json @@ -0,0 +1,15185 @@ +{ + "datamodel": { + "enums": [ + { + "name": "Role", + "values": [ + { + "name": "USER", + "dbName": null + }, + { + "name": "ADMIN", + "dbName": null + } + ], + "dbName": null + } + ], + "models": [ + { + "name": "User", + "isEmbedded": false, + "dbName": null, + "fields": [ + { + "name": "id", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": true, + "isReadOnly": false, + "type": "Int", + "hasDefaultValue": true, + "default": { + "name": "autoincrement", + "args": [] + }, + "isGenerated": false, + "isUpdatedAt": false, + "documentation": "@TsED.Groups(\"!creation\")\nComment" + }, + { + "name": "createdAt", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "DateTime", + "hasDefaultValue": true, + "default": { + "name": "now", + "args": [] + }, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "email", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": true, + "isId": false, + "isReadOnly": false, + "type": "String", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false, + "documentation": "@TsED.Email()\n@TsED.Description(\"User email. This email must be unique!\")" + }, + { + "name": "weight", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Float", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "is18", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Boolean", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "name", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "String", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "successorId", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": true, + "type": "Int", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "successor", + "kind": "object", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "User", + "hasDefaultValue": false, + "relationName": "BlogOwnerHistory", + "relationFromFields": ["successorId"], + "relationToFields": ["id"], + "relationOnDelete": "NONE", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "predecessor", + "kind": "object", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "User", + "hasDefaultValue": false, + "relationName": "BlogOwnerHistory", + "relationFromFields": [], + "relationToFields": [], + "relationOnDelete": "NONE", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "role", + "kind": "enum", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Role", + "hasDefaultValue": true, + "default": "USER", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "posts", + "kind": "object", + "isList": true, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Post", + "hasDefaultValue": false, + "relationName": "PostToUser", + "relationFromFields": [], + "relationToFields": [], + "relationOnDelete": "NONE", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "keywords", + "kind": "scalar", + "isList": true, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "String", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "biography", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Json", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + } + ], + "isGenerated": false, + "idFields": [], + "uniqueFields": [], + "uniqueIndexes": [] + }, + { + "name": "Post", + "isEmbedded": false, + "dbName": null, + "fields": [ + { + "name": "id", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": true, + "isReadOnly": false, + "type": "Int", + "hasDefaultValue": true, + "default": { + "name": "autoincrement", + "args": [] + }, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "user", + "kind": "object", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "User", + "hasDefaultValue": false, + "relationName": "PostToUser", + "relationFromFields": ["userId"], + "relationToFields": ["id"], + "relationOnDelete": "NONE", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "userId", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": true, + "type": "Int", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + } + ], + "isGenerated": false, + "idFields": [], + "uniqueFields": [], + "uniqueIndexes": [] + } + ] + }, + "schema": { + "inputObjectTypes": { + "prisma": [ + { + "name": "UserWhereInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "AND", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "OR", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "NOT", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "IntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTimeFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "StringFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "FloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "BoolNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "StringNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "IntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "UserRelationFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "UserRelationFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "EnumRoleFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostListRelationFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "StringNullableListFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "JsonFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserOrderByWithRelationInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 0 + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostOrderByRelationAggregateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserWhereUniqueInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "UserOrderByInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 0 + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserScalarWhereWithAggregatesInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "AND", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "OR", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "NOT", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "IntWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTimeWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "StringWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "FloatNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "BoolNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "StringNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "IntNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "EnumRoleWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "StringNullableListFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "JsonWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostWhereInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "AND", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "OR", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "NOT", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "IntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "user", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "UserRelationFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "IntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostOrderByWithRelationInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 0 + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "user", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostWhereUniqueInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostOrderByInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 0 + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostScalarWhereWithAggregatesInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "AND", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "OR", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "NOT", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "IntWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "IntNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateNestedOneWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateNestedOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateNestedManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedCreateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUncheckedCreateNestedOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUncheckedCreateNestedManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpdateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateOneWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedUpdateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NullableIntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUncheckedUpdateOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUncheckedUpdateManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateManyInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateManykeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + } + ] + }, + { + "name": "UserUpdateManyMutationInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + } + ] + }, + { + "name": "UserUncheckedUpdateManyInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NullableIntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + } + ] + }, + { + "name": "PostCreateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "user", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateNestedOneWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUncheckedCreateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUpdateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "user", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateOneWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUncheckedUpdateInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NullableIntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostCreateManyInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUpdateManyMutationInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [] + }, + { + "name": "PostUncheckedUpdateManyInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NullableIntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "IntFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "DateTimeFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "NestedDateTimeFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "StringFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "mode", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "QueryMode", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "FloatNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "BoolNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NestedBoolNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "StringNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "mode", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "QueryMode", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "IntNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "UserRelationFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "is", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "isNot", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "EnumRoleFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "NestedEnumRoleFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostListRelationFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "every", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "some", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "none", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "StringNullableListFilter", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "has", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "hasEvery", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "hasSome", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "isEmpty", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "JsonFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostOrderByRelationAggregateInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "count", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "SortOrder", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "IntWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "avg", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "sum", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "DateTimeWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "NestedDateTimeWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedDateTimeFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedDateTimeFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "StringWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "mode", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "QueryMode", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "FloatNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NestedFloatNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "avg", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "sum", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "BoolNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NestedBoolNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedBoolNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedBoolNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "StringNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "mode", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "QueryMode", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "IntNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "avg", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "sum", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "EnumRoleWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "NestedEnumRoleWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedEnumRoleFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedEnumRoleFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "JsonWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedJsonFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedJsonFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreatekeywordsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + } + ] + }, + { + "name": "UserCreateNestedOneWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateNestedOneWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostCreateNestedManyWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "createMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateManyUserInputEnvelope", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + } + ] + }, + { + "name": "UserUncheckedCreateNestedOneWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUncheckedCreateNestedManyWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "createMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateManyUserInputEnvelope", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + } + ] + }, + { + "name": "DateTimeFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "StringFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NullableFloatFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "increment", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "decrement", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "multiply", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "divide", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NullableBoolFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NullableStringFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "EnumRoleFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpdatekeywordsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "push", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + } + ] + }, + { + "name": "UserUpdateOneWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "upsert", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpsertWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "disconnect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "delete", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "update", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpdateOneWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "upsert", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpsertWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "disconnect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "delete", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "update", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUpdateManyWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "upsert", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpsertWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUpsertWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "createMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateManyUserInputEnvelope", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "set", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "disconnect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "delete", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "update", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUpdateWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "updateMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateManyWithWhereWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUpdateManyWithWhereWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "deleteMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + } + ] + }, + { + "name": "IntFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "increment", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "decrement", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "multiply", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "divide", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NullableIntFieldUpdateOperationsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "increment", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "decrement", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "multiply", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "divide", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedUpdateOneWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "upsert", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpsertWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "disconnect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "delete", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "update", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUncheckedUpdateManyWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostCreateOrConnectWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "upsert", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpsertWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUpsertWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "createMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateManyUserInputEnvelope", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "set", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "disconnect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "delete", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "update", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUpdateWithWhereUniqueWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "updateMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateManyWithWhereWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUpdateManyWithWhereWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "deleteMany", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + } + ] + }, + { + "name": "UserCreateManykeywordsInput", + "constraints": { + "maxNumFields": 1, + "minNumFields": 1 + }, + "fields": [ + { + "name": "set", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + } + ] + }, + { + "name": "UserCreateNestedOneWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpdateOneWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "create", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connectOrCreate", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateOrConnectWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "upsert", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpsertWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "connect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "disconnect", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "delete", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "update", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedIntFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedDateTimeFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "NestedDateTimeFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedStringFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedFloatNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedBoolNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NestedBoolNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedStringNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedIntNullableFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedEnumRoleFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "NestedEnumRoleFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedIntWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "avg", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "sum", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedFloatFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NestedFloatFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedDateTimeWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "NestedDateTimeWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedDateTimeFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedDateTimeFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedStringWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedFloatNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NestedFloatNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "avg", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "sum", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedBoolNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NestedBoolNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedBoolNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedBoolNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedStringNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "contains", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "startsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "endsWith", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NestedStringNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedStringNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedIntNullableWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": true + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "lte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "gte", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NestedIntNullableWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "avg", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedFloatNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "sum", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedEnumRoleWithAggregatesFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "in", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "notIn", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": true + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "NestedEnumRoleWithAggregatesFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "count", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedIntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "min", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedEnumRoleFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "max", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "NestedEnumRoleFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "NestedJsonFilter", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "equals", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "not", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateNestedOneWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateNestedManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedCreateWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUncheckedCreateNestedManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateOrConnectWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateNestedOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateNestedManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedCreateWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUncheckedCreateNestedOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUncheckedCreateNestedManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateOrConnectWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostCreateWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [] + }, + { + "name": "PostUncheckedCreateWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostCreateOrConnectWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostCreateManyUserInputEnvelope", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateManyUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "skipDuplicates", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpsertWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "update", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpdateWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateOneWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedUpdateWithoutPredecessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NullableIntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUncheckedUpdateManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpsertWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "update", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpdateWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedUpdateWithoutSuccessorInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUncheckedUpdateOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "posts", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUncheckedUpdateManyWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUpsertWithWhereUniqueWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "update", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedUpdateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUpdateWithWhereUniqueWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedUpdateWithoutUserInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUpdateManyWithWhereWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateManyMutationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedUpdateManyWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostScalarWhereInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "AND", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "OR", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "NOT", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostScalarWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "IntFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "userId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "IntNullableFilter", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateNestedOneWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateNestedOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedCreateWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUncheckedCreateNestedOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserCreateOrConnectWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpsertWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "update", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateWithoutPostsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUpdateWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "successor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateOneWithoutPredecessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "UserUncheckedUpdateWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "createdAt", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "DateTime", + "location": "scalar", + "isList": false + }, + { + "type": "DateTimeFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "email", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "StringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "weight", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Float", + "location": "scalar", + "isList": false + }, + { + "type": "NullableFloatFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "is18", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + }, + { + "type": "NullableBoolFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "name", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + }, + { + "type": "NullableStringFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "successorId", + "isRequired": false, + "isNullable": true, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "NullableIntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "Null", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "role", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + }, + { + "type": "EnumRoleFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "biography", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "keywords", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdatekeywordsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "String", + "location": "scalar", + "isList": true + } + ] + }, + { + "name": "predecessor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUncheckedUpdateOneWithoutSuccessorInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostCreateManyUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUpdateWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [] + }, + { + "name": "PostUncheckedUpdateWithoutUserInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + }, + { + "name": "PostUncheckedUpdateManyWithoutPostsInput", + "constraints": { + "maxNumFields": null, + "minNumFields": null + }, + "fields": [ + { + "name": "id", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + }, + { + "type": "IntFieldUpdateOperationsInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ] + } + ] + }, + "outputObjectTypes": { + "prisma": [ + { + "name": "Query", + "fields": [ + { + "name": "findFirstUser", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "distinct", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "findManyUser", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "distinct", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": true + } + }, + { + "name": "aggregateUser", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "UserOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AggregateUser", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "groupByUser", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserOrderByInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "UserOrderByInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "by", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + }, + { + "type": "UserScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "having", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "UserGroupByOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": true + } + }, + { + "name": "findUniqueUser", + "args": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "findFirstPost", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "distinct", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "findManyPost", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "distinct", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": true + } + }, + { + "name": "aggregatePost", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AggregatePost", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "groupByPost", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostOrderByInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostOrderByInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "by", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + }, + { + "type": "PostScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": false + } + ] + }, + { + "name": "having", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarWhereWithAggregatesInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "PostGroupByOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": true + } + }, + { + "name": "findUniquePost", + "args": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + } + ] + }, + { + "name": "Mutation", + "fields": [ + { + "name": "createOneUser", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "upsertOneUser", + "args": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "update", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "createManyUser", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserCreateManyInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "skipDuplicates", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AffectedRowsOutput", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "deleteOneUser", + "args": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "updateOneUser", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "updateManyUser", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "UserUpdateManyMutationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "UserUncheckedUpdateManyInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AffectedRowsOutput", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "deleteManyUser", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "UserWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AffectedRowsOutput", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "createOnePost", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "upsertOnePost", + "args": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "create", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedCreateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "update", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "createManyPost", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostCreateManyInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + } + ] + }, + { + "name": "skipDuplicates", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Boolean", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AffectedRowsOutput", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "deleteOnePost", + "args": [ + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "updateOnePost", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedUpdateInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "where", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "updateManyPost", + "args": [ + { + "name": "data", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "PostUpdateManyMutationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + }, + { + "type": "PostUncheckedUpdateManyInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AffectedRowsOutput", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "deleteManyPost", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "AffectedRowsOutput", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "executeRaw", + "args": [ + { + "name": "query", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "parameters", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "Json", + "location": "scalar", + "isList": false + } + }, + { + "name": "queryRaw", + "args": [ + { + "name": "query", + "isRequired": true, + "isNullable": false, + "inputTypes": [ + { + "type": "String", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "parameters", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Json", + "location": "scalar", + "isList": false + } + ] + } + ], + "isNullable": false, + "outputType": { + "type": "Json", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "AggregateUser", + "fields": [ + { + "name": "count", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserCountAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "avg", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserAvgAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "sum", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserSumAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "min", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserMinAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "max", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserMaxAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + } + ] + }, + { + "name": "UserGroupByOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "createdAt", + "args": [], + "isNullable": false, + "outputType": { + "type": "DateTime", + "location": "scalar", + "isList": false + } + }, + { + "name": "email", + "args": [], + "isNullable": false, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "is18", + "args": [], + "isNullable": true, + "outputType": { + "type": "Boolean", + "location": "scalar", + "isList": false + } + }, + { + "name": "name", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "role", + "args": [], + "isNullable": false, + "outputType": { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + }, + { + "name": "keywords", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": true + } + }, + { + "name": "biography", + "args": [], + "isNullable": false, + "outputType": { + "type": "Json", + "location": "scalar", + "isList": false + } + }, + { + "name": "count", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserCountAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "avg", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserAvgAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "sum", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserSumAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "min", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserMinAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "max", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserMaxAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + } + ] + }, + { + "name": "AggregatePost", + "fields": [ + { + "name": "count", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostCountAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "avg", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostAvgAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "sum", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostSumAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "min", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostMinAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "max", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostMaxAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + } + ] + }, + { + "name": "PostGroupByOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "userId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "count", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostCountAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "avg", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostAvgAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "sum", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostSumAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "min", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostMinAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "max", + "args": [], + "isNullable": true, + "outputType": { + "type": "PostMaxAggregateOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + } + ] + }, + { + "name": "AffectedRowsOutput", + "fields": [ + { + "name": "count", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "UserCountOutputType", + "fields": [ + { + "name": "posts", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "UserCountAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "createdAt", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "email", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "is18", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "name", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "role", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "keywords", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "biography", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "_all", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "UserAvgAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "UserSumAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "UserMinAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "createdAt", + "args": [], + "isNullable": true, + "outputType": { + "type": "DateTime", + "location": "scalar", + "isList": false + } + }, + { + "name": "email", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "is18", + "args": [], + "isNullable": true, + "outputType": { + "type": "Boolean", + "location": "scalar", + "isList": false + } + }, + { + "name": "name", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "role", + "args": [], + "isNullable": true, + "outputType": { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + } + ] + }, + { + "name": "UserMaxAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "createdAt", + "args": [], + "isNullable": true, + "outputType": { + "type": "DateTime", + "location": "scalar", + "isList": false + } + }, + { + "name": "email", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "is18", + "args": [], + "isNullable": true, + "outputType": { + "type": "Boolean", + "location": "scalar", + "isList": false + } + }, + { + "name": "name", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "role", + "args": [], + "isNullable": true, + "outputType": { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + } + ] + }, + { + "name": "PostCountAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "userId", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "_all", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "PostAvgAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "userId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "PostSumAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "userId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "PostMinAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "userId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + }, + { + "name": "PostMaxAggregateOutputType", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "userId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + } + ], + "model": [ + { + "name": "User", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "createdAt", + "args": [], + "isNullable": false, + "outputType": { + "type": "DateTime", + "location": "scalar", + "isList": false + } + }, + { + "name": "email", + "args": [], + "isNullable": false, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "is18", + "args": [], + "isNullable": true, + "outputType": { + "type": "Boolean", + "location": "scalar", + "isList": false + } + }, + { + "name": "name", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "successor", + "args": [], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "predecessor", + "args": [], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "role", + "args": [], + "isNullable": false, + "outputType": { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + }, + { + "name": "posts", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "distinct", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": true + } + }, + { + "name": "keywords", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": true + } + }, + { + "name": "biography", + "args": [], + "isNullable": false, + "outputType": { + "type": "Json", + "location": "scalar", + "isList": false + } + }, + { + "name": "_count", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserCountOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + } + ] + }, + { + "name": "Post", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "user", + "args": [], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "userId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + } + ] + } + ] + }, + "enumTypes": { + "prisma": [ + { + "name": "UserScalarFieldEnum", + "values": ["id", "createdAt", "email", "weight", "is18", "name", "successorId", "role", "keywords", "biography"] + }, + { + "name": "PostScalarFieldEnum", + "values": ["id", "userId"] + }, + { + "name": "SortOrder", + "values": ["asc", "desc"] + }, + { + "name": "QueryMode", + "values": ["default", "insensitive"] + } + ], + "model": [ + { + "name": "Role", + "values": ["USER", "ADMIN"] + } + ] + } + }, + "mappings": { + "modelOperations": [ + { + "model": "User", + "aggregate": "aggregateUser", + "createMany": "createManyUser", + "createOne": "createOneUser", + "deleteMany": "deleteManyUser", + "deleteOne": "deleteOneUser", + "findFirst": "findFirstUser", + "findMany": "findManyUser", + "findUnique": "findUniqueUser", + "groupBy": "groupByUser", + "updateMany": "updateManyUser", + "updateOne": "updateOneUser", + "upsertOne": "upsertOneUser" + }, + { + "model": "Post", + "aggregate": "aggregatePost", + "createMany": "createManyPost", + "createOne": "createOnePost", + "deleteMany": "deleteManyPost", + "deleteOne": "deleteOnePost", + "findFirst": "findFirstPost", + "findMany": "findManyPost", + "findUnique": "findUniquePost", + "groupBy": "groupByPost", + "updateMany": "updateManyPost", + "updateOne": "updateOnePost", + "upsertOne": "upsertOnePost" + } + ], + "otherOperations": { + "read": [], + "write": ["executeRaw", "queryRaw"] + } + } +} diff --git a/packages/orm/prisma/src/__mock__/dmmfUserModel.json b/packages/orm/prisma/src/__mock__/dmmfUserModel.json new file mode 100644 index 00000000000..7f48691b14b --- /dev/null +++ b/packages/orm/prisma/src/__mock__/dmmfUserModel.json @@ -0,0 +1,439 @@ +{ + "model": { + "name": "User", + "isEmbedded": false, + "dbName": null, + "fields": [ + { + "name": "id", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": true, + "isReadOnly": false, + "type": "Int", + "hasDefaultValue": true, + "default": { + "name": "autoincrement", + "args": [] + }, + "isGenerated": false, + "isUpdatedAt": false, + "documentation": "@TsED.Groups(\"!creation\")\nComment" + }, + { + "name": "createdAt", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "DateTime", + "hasDefaultValue": true, + "default": { + "name": "now", + "args": [] + }, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "email", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": true, + "isId": false, + "isReadOnly": false, + "type": "String", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false, + "documentation": "@TsED.Email()\n@TsED.Description(\"User email. This email must be unique!\")" + }, + { + "name": "weight", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Float", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "is18", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Boolean", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "name", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "String", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "successorId", + "kind": "scalar", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": true, + "type": "Int", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "successor", + "kind": "object", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "User", + "hasDefaultValue": false, + "relationName": "BlogOwnerHistory", + "relationFromFields": ["successorId"], + "relationToFields": ["id"], + "relationOnDelete": "NONE", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "predecessor", + "kind": "object", + "isList": false, + "isRequired": false, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "User", + "hasDefaultValue": false, + "relationName": "BlogOwnerHistory", + "relationFromFields": [], + "relationToFields": [], + "relationOnDelete": "NONE", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "role", + "kind": "enum", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Role", + "hasDefaultValue": true, + "default": "USER", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "posts", + "kind": "object", + "isList": true, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Post", + "hasDefaultValue": false, + "relationName": "PostToUser", + "relationFromFields": [], + "relationToFields": [], + "relationOnDelete": "NONE", + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "keywords", + "kind": "scalar", + "isList": true, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "String", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + }, + { + "name": "biography", + "kind": "scalar", + "isList": false, + "isRequired": true, + "isUnique": false, + "isId": false, + "isReadOnly": false, + "type": "Json", + "hasDefaultValue": false, + "isGenerated": false, + "isUpdatedAt": false + } + ], + "isGenerated": false, + "idFields": [], + "uniqueFields": [], + "uniqueIndexes": [] + }, + "modelType": { + "name": "User", + "fields": [ + { + "name": "id", + "args": [], + "isNullable": false, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "createdAt", + "args": [], + "isNullable": false, + "outputType": { + "type": "DateTime", + "location": "scalar", + "isList": false + } + }, + { + "name": "email", + "args": [], + "isNullable": false, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "weight", + "args": [], + "isNullable": true, + "outputType": { + "type": "Float", + "location": "scalar", + "isList": false + } + }, + { + "name": "is18", + "args": [], + "isNullable": true, + "outputType": { + "type": "Boolean", + "location": "scalar", + "isList": false + } + }, + { + "name": "name", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": false + } + }, + { + "name": "successorId", + "args": [], + "isNullable": true, + "outputType": { + "type": "Int", + "location": "scalar", + "isList": false + } + }, + { + "name": "successor", + "args": [], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "predecessor", + "args": [], + "isNullable": true, + "outputType": { + "type": "User", + "namespace": "model", + "location": "outputObjectTypes", + "isList": false + } + }, + { + "name": "role", + "args": [], + "isNullable": false, + "outputType": { + "type": "Role", + "namespace": "model", + "location": "enumTypes", + "isList": false + } + }, + { + "name": "posts", + "args": [ + { + "name": "where", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "orderBy", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": true + }, + { + "type": "PostOrderByWithRelationInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "cursor", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostWhereUniqueInput", + "namespace": "prisma", + "location": "inputObjectTypes", + "isList": false + } + ] + }, + { + "name": "take", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "skip", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "Int", + "location": "scalar", + "isList": false + } + ] + }, + { + "name": "distinct", + "isRequired": false, + "isNullable": false, + "inputTypes": [ + { + "type": "PostScalarFieldEnum", + "namespace": "prisma", + "location": "enumTypes", + "isList": true + } + ] + } + ], + "isNullable": true, + "outputType": { + "type": "Post", + "namespace": "model", + "location": "outputObjectTypes", + "isList": true + } + }, + { + "name": "keywords", + "args": [], + "isNullable": true, + "outputType": { + "type": "String", + "location": "scalar", + "isList": true + } + }, + { + "name": "biography", + "args": [], + "isNullable": false, + "outputType": { + "type": "Json", + "location": "scalar", + "isList": false + } + }, + { + "name": "_count", + "args": [], + "isNullable": true, + "outputType": { + "type": "UserCountOutputType", + "namespace": "prisma", + "location": "outputObjectTypes", + "isList": false + } + } + ] + }, + "isInputType": false +} diff --git a/packages/orm/prisma/src/cli/dev.ts b/packages/orm/prisma/src/cli/dev.ts new file mode 100644 index 00000000000..c78e42f6f70 --- /dev/null +++ b/packages/orm/prisma/src/cli/dev.ts @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +try { + require("tsconfig-paths/register"); + require("ts-node/register/transpile-only"); + require("./generator"); +} catch (er) { + console.log(er); + process.exit(-1); +} diff --git a/packages/orm/prisma/src/cli/generator.ts b/packages/orm/prisma/src/cli/generator.ts new file mode 100644 index 00000000000..d9c1e6a713b --- /dev/null +++ b/packages/orm/prisma/src/cli/generator.ts @@ -0,0 +1,12 @@ +import {generatorHandler} from "@prisma/generator-helper"; +import {generate} from "./prismaGenerator"; +import {join} from "path"; + +generatorHandler({ + onManifest: () => ({ + defaultOutput: join(__dirname, "..", ".schema"), + prettyName: "Ts.ED integration", + requiresGenerators: ["prisma-client-js"] + }), + onGenerate: generate +}); diff --git a/packages/orm/prisma/src/cli/prismaGenerator.ts b/packages/orm/prisma/src/cli/prismaGenerator.ts new file mode 100644 index 00000000000..f57ad42bed0 --- /dev/null +++ b/packages/orm/prisma/src/cli/prismaGenerator.ts @@ -0,0 +1,32 @@ +import {GeneratorOptions} from "@prisma/generator-helper"; +import {parseEnvValue} from "@prisma/sdk"; +import {promises as asyncFs} from "fs"; +import {generateCode} from "../generator/generateCode"; +import removeDir from "../generator/utils/removeDir"; +import path from "path"; + +function parseStringBoolean(stringBoolean: string | undefined) { + return Boolean(stringBoolean ? stringBoolean === "true" : undefined); +} + +function toUnixPath(maybeWindowsPath: string) { + return maybeWindowsPath.split("\\").join("/"); +} + +export async function generate(options: GeneratorOptions) { + const outputDir = parseEnvValue(options.generator.output!); + await asyncFs.mkdir(outputDir, {recursive: true}); + await removeDir(outputDir, true); + + const generatorConfig = options.generator.config; + const prismaClientProvider = options.otherGenerators.find((it) => parseEnvValue(it.provider) === "prisma-client-js")!; + const prismaClientPath = parseEnvValue(prismaClientProvider.output!); + + await generateCode(options.dmmf, { + emitTranspiledCode: parseStringBoolean(generatorConfig.emitTranspiledCode), + outputDirPath: outputDir, + prismaClientPath: prismaClientPath.includes("node_modules") ? "@prisma/client" : toUnixPath(path.relative(outputDir, prismaClientPath)) + }); + + return ""; +} diff --git a/packages/orm/prisma/src/generator.ts b/packages/orm/prisma/src/generator.ts new file mode 100644 index 00000000000..10263298fc9 --- /dev/null +++ b/packages/orm/prisma/src/generator.ts @@ -0,0 +1,2 @@ +#!/usr/bin/env ts-node +import "./cli/generator"; diff --git a/packages/orm/prisma/src/generator/domain/DmmfEnum.ts b/packages/orm/prisma/src/generator/domain/DmmfEnum.ts new file mode 100644 index 00000000000..ede80fe79c1 --- /dev/null +++ b/packages/orm/prisma/src/generator/domain/DmmfEnum.ts @@ -0,0 +1,42 @@ +import {DMMF} from "@prisma/generator-helper"; +import {ImportDeclarationStructure, StructureKind} from "ts-morph"; + +export class DmmfEnum { + readonly model: DMMF.DatamodelEnum; + readonly modelType: DMMF.SchemaEnum; + + #imports = new Map(); + + constructor({model, modelType}: {model: DMMF.DatamodelEnum; modelType: DMMF.SchemaEnum}) { + this.model = model; + this.modelType = modelType; + } + + get name() { + return this.model.name; + } + + get values() { + return this.modelType.values; + } + + static getEnums(dmmf: DMMF.Document, enumsMap: Map) { + const enums = dmmf.schema.enumTypes.model || []; + + return enums.map( + (modelType) => + new DmmfEnum({ + modelType, + model: enumsMap.get(modelType.name) as unknown as DMMF.DatamodelEnum + }) + ); + } + + static symbolName(name: string) { + return `${name}`; + } + + toString() { + return DmmfEnum.symbolName(this.name); + } +} diff --git a/packages/orm/prisma/src/generator/domain/DmmfField.ts b/packages/orm/prisma/src/generator/domain/DmmfField.ts new file mode 100644 index 00000000000..80f1755bd05 --- /dev/null +++ b/packages/orm/prisma/src/generator/domain/DmmfField.ts @@ -0,0 +1,51 @@ +import {DMMF} from "@prisma/generator-helper"; +import {parseDocumentationAttributes} from "../utils/parseDocumentationAttributes"; +import type {DmmfModel} from "./DmmfModel"; + +export class DmmfField { + readonly model: DmmfModel; + readonly field: DMMF.Field; + readonly schemaArg: DMMF.SchemaArg; + + constructor({field, schemaArg, model}: any) { + this.field = field; + this.model = model; + this.schemaArg = schemaArg; + } + + get name() { + return this.field.name; + } + + get isRequired() { + return this.field.isRequired; + } + + get type() { + return this.field.type; + } + + get isList() { + return this.field.isList; + } + + get kind() { + return this.field.kind; + } + + get isNullable() { + return this.schemaArg.isNullable; + } + + get location(): "enumTypes" | "inputObjectTypes" | "scalar" { + return this.field.kind === "enum" ? "enumTypes" : this.field.kind === "object" ? "inputObjectTypes" : "scalar"; + } + + getAdditionalDecorators() { + return parseDocumentationAttributes(this.field.documentation); + } + + toString() { + return this.name; + } +} diff --git a/packages/orm/prisma/src/generator/domain/DmmfModel.ts b/packages/orm/prisma/src/generator/domain/DmmfModel.ts new file mode 100644 index 00000000000..c46841b7908 --- /dev/null +++ b/packages/orm/prisma/src/generator/domain/DmmfModel.ts @@ -0,0 +1,93 @@ +import {DMMF} from "@prisma/generator-helper"; +import {toMap} from "@tsed/core"; +import {ImportDeclarationStructure, StructureKind} from "ts-morph"; +import {DmmfField} from "./DmmfField"; + +export class DmmfModel { + readonly isInputType: boolean; + readonly model: DMMF.Model; + readonly modelType: DMMF.InputType | DMMF.OutputType; + #imports = new Map(); + + constructor({isInputType, model, modelType}: any) { + this.model = model; + this.modelType = modelType; + this.isInputType = isInputType; + } + + get name() { + return this.model.name; + } + + get fields() { + const dataField = toMap(this.modelType.fields as any, "name"); + + return this.model.fields.map((field) => { + return new DmmfField({ + model: this, + field, + schemaArg: dataField.get(field.name) + }); + }); + } + + get importDeclarations() { + return [...this.#imports.values()]; + } + + static getModels(dmmf: DMMF.Document, modelsMap: Map) { + const inputObjectsTypes = dmmf.schema.inputObjectTypes.model || []; + const outputObjectTypes = dmmf.schema.outputObjectTypes.model || []; + + const inputs = inputObjectsTypes.map( + (modelType) => + new DmmfModel({ + modelType, + model: modelsMap.get(modelType.name), + isInputType: true + }) + ); + + const outputs = outputObjectTypes.map( + (modelType) => + new DmmfModel({ + modelType, + model: modelsMap.get(modelType.name), + isInputType: false + }) + ); + + return [...inputs, ...outputs]; + } + + static symbolName(name: string) { + return `${name}Model`; + } + + addImportDeclaration(moduleSpecifier: string, name: string, isDefault = false) { + if (!this.#imports.has(moduleSpecifier)) { + this.#imports.set(moduleSpecifier, { + kind: StructureKind.ImportDeclaration, + moduleSpecifier: moduleSpecifier, + namedImports: [] + }); + } + + const moduleDeclaration = this.#imports.get(moduleSpecifier)!; + + if (isDefault) { + moduleDeclaration.defaultImport = name; + } else { + const nameImports = moduleDeclaration.namedImports as any[]; + if (!nameImports.includes(name)) { + nameImports.push(name); + } + } + + return this; + } + + toString() { + return DmmfModel.symbolName(this.name); + } +} diff --git a/packages/orm/prisma/src/generator/domain/ScalarTsTypes.ts b/packages/orm/prisma/src/generator/domain/ScalarTsTypes.ts new file mode 100644 index 00000000000..ebb8d68ba02 --- /dev/null +++ b/packages/orm/prisma/src/generator/domain/ScalarTsTypes.ts @@ -0,0 +1,54 @@ +import {DecoratorStructure, StructureKind} from "ts-morph"; + +export enum PrismaScalars { + String = "String", + Boolean = "Boolean", + Int = "Int", + Float = "Float", + BigInt = "BigInt", + Decimal = "Decimal", + DateTime = "DateTime", + Json = "Json", + Bytes = "Bytes" +} + +export const ScalarTsTypes: Record = { + [PrismaScalars.String]: "string", + [PrismaScalars.Boolean]: "boolean", + [PrismaScalars.Int]: "number", + [PrismaScalars.Float]: "number", + [PrismaScalars.Decimal]: "number", + [PrismaScalars.BigInt]: "bigint", + [PrismaScalars.DateTime]: "Date", + [PrismaScalars.Json]: "any", + [PrismaScalars.Bytes]: "Buffer" +}; + +export const ScalarJsClasses: Record = { + [PrismaScalars.String]: "String", + [PrismaScalars.Boolean]: "Boolean", + [PrismaScalars.Int]: "Number", + [PrismaScalars.Float]: "Number", + [PrismaScalars.Decimal]: "Number", + [PrismaScalars.BigInt]: "BigInt", + [PrismaScalars.DateTime]: "Date", + [PrismaScalars.Json]: "Object", + [PrismaScalars.Bytes]: "Buffer" +}; + +export const ScalarDecorators: Record[]> = { + [PrismaScalars.String]: [], + [PrismaScalars.Boolean]: [], + [PrismaScalars.Int]: [ + { + name: "Integer", + arguments: [] + } + ], + [PrismaScalars.Float]: [], + [PrismaScalars.BigInt]: [], + [PrismaScalars.Decimal]: [], + [PrismaScalars.DateTime]: [{name: "Format", arguments: ['"date-time"']}], + [PrismaScalars.Json]: [], + [PrismaScalars.Bytes]: [] +}; diff --git a/packages/orm/prisma/src/generator/domain/TransformContext.ts b/packages/orm/prisma/src/generator/domain/TransformContext.ts new file mode 100644 index 00000000000..c4625ddfe06 --- /dev/null +++ b/packages/orm/prisma/src/generator/domain/TransformContext.ts @@ -0,0 +1,7 @@ +import {DMMF} from "@prisma/generator-helper"; +import {SourceFile} from "ts-morph"; + +export interface TransformContext { + dmmf: DMMF.Document; + modelsMap: Map; +} diff --git a/packages/orm/prisma/src/generator/generateCode.spec.ts b/packages/orm/prisma/src/generator/generateCode.spec.ts new file mode 100644 index 00000000000..2068b71727e --- /dev/null +++ b/packages/orm/prisma/src/generator/generateCode.spec.ts @@ -0,0 +1,16 @@ +import {generateCode} from "./generateCode"; +import {createProjectFixture} from "../__mock__/createProjectFixture"; +import {createDmmfFixture} from "../__mock__/createDmmfFixture"; + +describe("generateCode", () => { + it("should generate all codes", async () => { + const {baseDir} = createProjectFixture("generate_code"); + const dmmf = createDmmfFixture(); + + await generateCode(dmmf, { + emitTranspiledCode: false, + outputDirPath: baseDir, + prismaClientPath: "@prisma/client" + }); + }); +}); diff --git a/packages/orm/prisma/src/generator/generateCode.ts b/packages/orm/prisma/src/generator/generateCode.ts new file mode 100644 index 00000000000..15ed8778b0c --- /dev/null +++ b/packages/orm/prisma/src/generator/generateCode.ts @@ -0,0 +1,51 @@ +import {DMMF} from "@prisma/generator-helper"; +import path from "path"; +import {CompilerOptions, ModuleKind, Project, ScriptTarget} from "ts-morph"; +import {generateEnums} from "./utils/generateEnums"; +import {generateModels} from "./utils/generateModels"; +import {generateClientIndex} from "./utils/generateClientIndex"; +import {generateInterfaces} from "./utils/generateInterfaces"; +import {generateIndex} from "./utils/generateIndex"; +import {generatePrismaService} from "./utils/generatePrismaService"; +import {generateRepositories} from "./utils/generateRepositories"; +import {saveProject} from "./utils/saveProject"; + +const baseCompilerOptions: CompilerOptions = { + target: ScriptTarget.ES2019, + module: ModuleKind.CommonJS, + emitDecoratorMetadata: true, + experimentalDecorators: true, + esModuleInterop: true +}; + +export interface GenerateCodeOptions { + emitTranspiledCode: boolean; + outputDirPath: string; + prismaClientPath: string; +} + +export async function generateCode(dmmf: DMMF.Document, options: GenerateCodeOptions) { + const baseDirPath = options.outputDirPath; + const emitTranspiledCode = options.emitTranspiledCode ? true : options.outputDirPath.includes("node_modules"); + + const project = new Project({ + compilerOptions: { + ...baseCompilerOptions, + ...(emitTranspiledCode && {declaration: true}) + } + }); + + const hasEnum = generateEnums(dmmf, project, baseDirPath); + generateModels(dmmf, project, baseDirPath); + generateInterfaces(project, baseDirPath); + generateClientIndex(project, baseDirPath, options); + generatePrismaService(project, baseDirPath); + generateRepositories(dmmf, project, baseDirPath); + generateIndex(project, baseDirPath, hasEnum); + + if (emitTranspiledCode) { + await project.emit(); + } else { + await saveProject(project); + } +} diff --git a/packages/orm/prisma/src/generator/transform/transformEnumsToEnums.spec.ts b/packages/orm/prisma/src/generator/transform/transformEnumsToEnums.spec.ts new file mode 100644 index 00000000000..691094a5cac --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformEnumsToEnums.spec.ts @@ -0,0 +1,44 @@ +import {transformEnumsToEnums} from "./transformEnumsToEnums"; +import {DmmfEnum} from "../domain/DmmfEnum"; + +describe("transformEnumsToEnums()", () => { + it("should transform Prisma Enum to a TS Enum", () => { + const enumModel = new DmmfEnum({ + model: { + name: "Role", + values: [ + { + name: "ADMIN", + dbName: "dbName" + }, + { + name: "USER", + dbName: "dbName" + } + ] + }, + modelType: { + name: "Role", + values: ["ADMIN", "USER"] + } + }); + + expect(transformEnumsToEnums(enumModel)).toEqual({ + isExported: true, + kind: 7, + leadingTrivia: "\n", + members: [ + { + name: "ADMIN", + value: "ADMIN" + }, + { + name: "USER", + value: "USER" + } + ], + name: "Role", + trailingTrivia: "\n" + }); + }); +}); diff --git a/packages/orm/prisma/src/generator/transform/transformEnumsToEnums.ts b/packages/orm/prisma/src/generator/transform/transformEnumsToEnums.ts new file mode 100644 index 00000000000..da7f3bbad83 --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformEnumsToEnums.ts @@ -0,0 +1,20 @@ +import {EnumMemberStructure, OptionalKind, StatementStructures, StructureKind} from "ts-morph"; +import {DmmfEnum} from "../domain/DmmfEnum"; + +export function transformEnumsToEnums(enumModel: DmmfEnum): StatementStructures { + const members: OptionalKind[] = enumModel.values.map((value) => { + return { + name: value, + value: value + }; + }); + + return { + kind: StructureKind.Enum, + name: enumModel.toString(), + trailingTrivia: "\n", + leadingTrivia: "\n", + isExported: true, + members + }; +} diff --git a/packages/orm/prisma/src/generator/transform/transformFieldToDecorators.spec.ts b/packages/orm/prisma/src/generator/transform/transformFieldToDecorators.spec.ts new file mode 100644 index 00000000000..1785ad4b9d6 --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformFieldToDecorators.spec.ts @@ -0,0 +1,222 @@ +import {createDmmfFieldFixture} from "../../__mock__/createDmmfFieldFixture"; +import {PrismaScalars} from "../domain/ScalarTsTypes"; +import {createContextFixture} from "../../__mock__/createContextFixture"; +import {transformFieldToDecorators} from "./transformFieldToDecorators"; + +describe("transformFieldToDecorators()", () => { + it("should transform String to decorator", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String + }); + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["String"], + kind: 6, + name: "Property" + } + ]); + }); + + it("should transform String to string (Required)", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String, + isRequired: true + }); + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["String"], + kind: 6, + name: "Property" + }, + { + arguments: [], + kind: 6, + name: "Required" + } + ]); + }); + + it("should transform String to string (Required + null)", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String, + isRequired: true, + isNullable: true + }); + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["String"], + kind: 6, + name: "Property" + }, + { + arguments: [], + kind: 6, + name: "Required" + }, + { + arguments: ["null"], + kind: 6, + name: "Allow" + } + ]); + }); + + it("should transform String to string (Required + null + List)", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String, + isRequired: true, + isNullable: true, + isList: true + }); + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["String"], + kind: 6, + name: "CollectionOf" + }, + { + arguments: [], + kind: 6, + name: "Required" + } + ]); + }); + + it("should transform Int to number", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.Int + }); + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["Number"], + kind: 6, + name: "Property" + }, + { + arguments: [], + kind: 6, + name: "Integer" + } + ]); + }); + + it("should transform DateTime to Date", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.DateTime + }); + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["Date"], + kind: 6, + name: "Property" + }, + { + arguments: ['"date-time"'], + kind: 6, + name: "Format" + } + ]); + }); + + it("should transform enumTypes to Date", () => { + const field = createDmmfFieldFixture({ + kind: "enum", + type: "Role" + }); + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["Role"], + kind: 6, + name: "Enum" + } + ]); + }); + + it("should transform User to User (self-ref)", () => { + const field = createDmmfFieldFixture({ + kind: "object", + type: "User" + }); + // @ts-ignore + field.model.name = "User"; + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["() => UserModel"], + kind: 6, + name: "Property" + } + ]); + }); + + it("should transform User to User", () => { + const field = createDmmfFieldFixture({ + kind: "object", + type: "Role" + }); + // @ts-ignore + field.model.name = "User"; + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["() => RoleModel"], + kind: 6, + name: "Property" + } + ]); + }); + + it("should transform User to User (list)", () => { + const field = createDmmfFieldFixture({ + kind: "object", + type: "Role", + isList: true + }); + // @ts-ignore + field.model.name = "User"; + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["() => RoleModel"], + kind: 6, + name: "CollectionOf" + } + ]); + }); + + it("should transform User to User, Groups", () => { + const field = createDmmfFieldFixture({ + kind: "object", + type: "Role", + documentation: '// @TsED.Groups("expression")' + }); + // @ts-ignore + field.model.name = "User"; + const ctx = createContextFixture(); + expect(transformFieldToDecorators(field, ctx)).toEqual([ + { + arguments: ["() => RoleModel"], + kind: 6, + name: "Property" + }, + { + arguments: ['"expression"'], + kind: 6, + name: "Groups" + } + ]); + }); +}); diff --git a/packages/orm/prisma/src/generator/transform/transformFieldToDecorators.ts b/packages/orm/prisma/src/generator/transform/transformFieldToDecorators.ts new file mode 100644 index 00000000000..c49d811f86c --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformFieldToDecorators.ts @@ -0,0 +1,69 @@ +import {DecoratorStructure, StructureKind} from "ts-morph"; +import {DmmfField} from "../domain/DmmfField"; +import {DmmfModel} from "../domain/DmmfModel"; +import {ScalarDecorators, ScalarJsClasses} from "../domain/ScalarTsTypes"; +import {TransformContext} from "../domain/TransformContext"; +import {isCircularRef} from "../utils/isCircularRef"; + +function createDecorator(name: string, args: string[]): DecoratorStructure { + return { + kind: StructureKind.Decorator, + name, + arguments: args + }; +} + +export function transformFieldToDecorators(field: DmmfField, ctx: TransformContext): DecoratorStructure[] { + const decorators: DecoratorStructure[] = [...(ScalarDecorators[field.type] || [])].map((obj) => { + field.model.addImportDeclaration("@tsed/schema", obj.name); + + return { + kind: StructureKind.Decorator, + ...obj + }; + }); + + if (field.isRequired) { + field.model.addImportDeclaration("@tsed/schema", "Required"); + decorators.push(createDecorator("Required", [])); + } + + if (field.location === "enumTypes") { + field.model.addImportDeclaration("@tsed/schema", "Enum"); + decorators.push(createDecorator("Enum", [field.type])); + } + + if (field.isNullable && !field.isList) { + field.model.addImportDeclaration("@tsed/schema", "Allow"); + decorators.push(createDecorator("Allow", ["null"])); + } + + if (field.isList && field.location !== "enumTypes") { + let classType = ScalarJsClasses[field.type] || DmmfModel.symbolName(field.type); + + if (isCircularRef(field.model.name, field.type, ctx)) { + classType = `() => ${classType}`; + } + + field.model.addImportDeclaration("@tsed/schema", "CollectionOf"); + decorators.unshift(createDecorator("CollectionOf", [classType])); + } + + if (field.location !== "enumTypes" && !field.isList) { + let classType = ScalarJsClasses[field.type] || DmmfModel.symbolName(field.type); + + if (isCircularRef(field.model.name, field.type, ctx)) { + classType = `() => ${classType}`; + } + + field.model.addImportDeclaration("@tsed/schema", "Property"); + decorators.unshift(createDecorator("Property", [classType])); + } + + field.getAdditionalDecorators().forEach((item) => { + field.model.addImportDeclaration("@tsed/schema", item.name); + decorators.push(createDecorator(item.name, item.arguments)); + }); + + return decorators; +} diff --git a/packages/orm/prisma/src/generator/transform/transformFieldToProperty.ts b/packages/orm/prisma/src/generator/transform/transformFieldToProperty.ts new file mode 100644 index 00000000000..c2c69131782 --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformFieldToProperty.ts @@ -0,0 +1,15 @@ +import {PropertyDeclarationStructure, StructureKind} from "ts-morph"; +import {DmmfField} from "../domain/DmmfField"; +import {TransformContext} from "../domain/TransformContext"; +import {transformFieldToDecorators} from "./transformFieldToDecorators"; +import {transformScalarToType} from "./transformScalarToType"; + +export function transformFieldToProperty(field: DmmfField, ctx: TransformContext): PropertyDeclarationStructure { + return { + kind: StructureKind.Property, + name: field.name, + trailingTrivia: "\n", + type: transformScalarToType(field), + decorators: transformFieldToDecorators(field, ctx) + }; +} diff --git a/packages/orm/prisma/src/generator/transform/transformModelToClass.spec.ts b/packages/orm/prisma/src/generator/transform/transformModelToClass.spec.ts new file mode 100644 index 00000000000..8ca67ce9051 --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformModelToClass.spec.ts @@ -0,0 +1,495 @@ +import {transformModelToClass} from "./transformModelToClass"; +import {DmmfModel} from "../domain/DmmfModel"; +import {createContextFixture} from "../../__mock__/createContextFixture"; +import {createDmmfModelFixture} from "../../__mock__/createDmmfModelFixture"; + +describe("transformModelToClass()", () => { + it("should transform Prisma model to a TS Model (InputType)", () => { + const model = new DmmfModel({ + isInputType: true, + model: { + name: "User", + fields: [ + { + name: "id", + isRequired: false, + isNullable: false, + type: "String", + isList: false, + location: "" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "id", + isNullable: false, + type: "String", + isList: false, + location: "" + } + ] + } + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: ["String"], + kind: 6, + name: "Property" + } + ], + kind: 30, + name: "id", + trailingTrivia: "\n", + type: "string | undefined" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model (InputType + required)", () => { + const model = new DmmfModel({ + isInputType: true, + model: { + name: "User", + fields: [ + { + name: "id", + isRequired: true, + isNullable: false, + type: "String", + isList: false, + location: "" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "id", + isNullable: false, + type: "String", + isList: false, + location: "" + } + ] + } + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: ["String"], + kind: 6, + name: "Property" + }, + { + arguments: [], + kind: 6, + name: "Required" + } + ], + kind: 30, + name: "id", + trailingTrivia: "\n", + type: "string" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model (OutputType)", () => { + const model = new DmmfModel({ + model: { + name: "User", + fields: [ + { + name: "id", + isRequired: false, + type: "String", + isList: false, + location: "" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "id", + isNullable: true, + type: "String", + isList: false, + location: "" + } + ] + }, + isInputType: false + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: ["String"], + kind: 6, + name: "Property" + }, + { + arguments: ["null"], + kind: 6, + name: "Allow" + } + ], + kind: 30, + name: "id", + trailingTrivia: "\n", + type: "string | null" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model (OutputType + required)", () => { + const model = new DmmfModel({ + model: { + name: "User", + fields: [ + { + name: "id", + isRequired: true, + isNullable: false, + type: "String", + isList: false, + location: "" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "id", + isNullable: false, + type: "String", + isList: false, + location: "" + } + ] + }, + isInputType: false + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: ["String"], + kind: 6, + name: "Property" + }, + { + arguments: [], + kind: 6, + name: "Required" + } + ], + kind: 30, + name: "id", + trailingTrivia: "\n", + type: "string" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model (List)", () => { + const model = new DmmfModel({ + isInputType: true, + model: { + name: "User", + fields: [ + { + name: "ids", + isRequired: false, + type: "String", + isList: true, + location: "" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "ids", + isNullable: false, + type: "String", + location: "" + } + ] + } + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: ["String"], + kind: 6, + name: "CollectionOf" + } + ], + kind: 30, + name: "ids", + trailingTrivia: "\n", + type: "string[] | undefined" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model (List + required)", () => { + const model = new DmmfModel({ + isInputType: true, + model: { + name: "User", + fields: [ + { + name: "ids", + isRequired: true, + type: "String", + isList: true, + location: "" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "ids", + isNullable: false, + type: "String", + location: "" + } + ] + } + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: ["String"], + kind: 6, + name: "CollectionOf" + }, + { + arguments: [], + kind: 6, + name: "Required" + } + ], + kind: 30, + name: "ids", + trailingTrivia: "\n", + type: "string[]" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model (Enum)", () => { + const model = new DmmfModel({ + isInputType: true, + model: { + name: "User", + fields: [ + { + name: "role", + isRequired: true, + type: "Role", + isList: false, + kind: "enum" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "role", + isNullable: false, + type: "Role" + } + ] + } + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: [], + kind: 6, + name: "Required" + }, + { + arguments: ["Role"], + kind: 6, + name: "Enum" + } + ], + kind: 30, + name: "role", + trailingTrivia: "\n", + type: "Role" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model (List + Enum)", () => { + const model = new DmmfModel({ + isInputType: true, + model: { + name: "User", + fields: [ + { + name: "role", + isRequired: true, + type: "Role", + isList: true, + kind: "enum" + } + ] + }, + modelType: { + name: "user", + fields: [ + { + name: "role", + isNullable: false, + type: "Role" + } + ] + } + }); + + const ctx = createContextFixture(); + + expect(transformModelToClass(model, ctx)).toEqual({ + implements: ["User"], + isExported: true, + kind: 1, + leadingTrivia: "\n", + name: "UserModel", + properties: [ + { + decorators: [ + { + arguments: [], + kind: 6, + name: "Required" + }, + { + arguments: ["Role"], + kind: 6, + name: "Enum" + } + ], + kind: 30, + name: "role", + trailingTrivia: "\n", + type: "Role[]" + } + ], + trailingTrivia: "\n" + }); + }); + it("should transform Prisma model to a TS Model and exclude fields with immediate relation", () => { + const model = createDmmfModelFixture(); + const ctx = createContextFixture(); + const output: any = transformModelToClass(model, ctx); + + expect(output.properties.map((p: any) => p.name)).toEqual([ + "id", + "createdAt", + "email", + "weight", + "is18", + "name", + "successorId", + "successor", + "predecessor", + "role", + "posts", + "keywords", + "biography" + ]); + }); +}); diff --git a/packages/orm/prisma/src/generator/transform/transformModelToClass.ts b/packages/orm/prisma/src/generator/transform/transformModelToClass.ts new file mode 100644 index 00000000000..4b2b0a1e345 --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformModelToClass.ts @@ -0,0 +1,18 @@ +import {StatementStructures, StructureKind} from "ts-morph"; +import {DmmfModel} from "../domain/DmmfModel"; +import {TransformContext} from "../domain/TransformContext"; +import {transformFieldToProperty} from "./transformFieldToProperty"; + +export function transformModelToClass(model: DmmfModel, ctx: TransformContext): StatementStructures { + model.addImportDeclaration("../client", model.name); + + return { + kind: StructureKind.Class, + name: model.toString(), + trailingTrivia: "\n", + leadingTrivia: "\n", + isExported: true, + implements: [model.name], + properties: model.fields.map((field) => transformFieldToProperty(field, ctx)) + }; +} diff --git a/packages/orm/prisma/src/generator/transform/transformScalarToType.spec.ts b/packages/orm/prisma/src/generator/transform/transformScalarToType.spec.ts new file mode 100644 index 00000000000..cc1cd608b58 --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformScalarToType.spec.ts @@ -0,0 +1,100 @@ +import {transformScalarToType} from "./transformScalarToType"; +import {createDmmfFieldFixture} from "../../__mock__/createDmmfFieldFixture"; +import {PrismaScalars} from "../domain/ScalarTsTypes"; + +describe("transformScalarToType()", () => { + it("should transform String to string", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String + }); + expect(transformScalarToType(field)).toEqual("string | null"); + }); + + it("should transform String to string (isInputType)", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String, + isInputType: true + }); + + expect(transformScalarToType(field)).toEqual("string | undefined"); + }); + + it("should transform String to string (Required)", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String, + isRequired: true + }); + expect(transformScalarToType(field)).toEqual("string"); + }); + + it("should transform String to string (Required + null)", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String, + isRequired: true, + isNullable: true + }); + expect(transformScalarToType(field)).toEqual("string | null"); + }); + + it("should transform String to string (Required + null + List)", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.String, + isRequired: true, + isNullable: true, + isList: true + }); + expect(transformScalarToType(field)).toEqual("string[]"); + }); + + it("should transform Int to number", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.Int + }); + expect(transformScalarToType(field)).toEqual("number | null"); + }); + + it("should transform DateTime to Date", () => { + const field = createDmmfFieldFixture({ + kind: "scalar", + type: PrismaScalars.DateTime + }); + expect(transformScalarToType(field)).toEqual("Date | null"); + }); + + it("should transform enumTypes to Date", () => { + const field = createDmmfFieldFixture({ + kind: "enum", + type: "Role" + }); + expect(transformScalarToType(field)).toEqual("Role | null"); + expect(field.model.addImportDeclaration).toHaveBeenCalledWith("../enums", "Role"); + }); + + it("should transform User to User (self-ref)", () => { + const field = createDmmfFieldFixture({ + kind: "object", + type: "User" + }); + // @ts-ignore + field.model.name = "User"; + expect(transformScalarToType(field)).toEqual("UserModel | null"); + expect(field.model.addImportDeclaration).not.toHaveBeenCalled(); + }); + + it("should transform User to User", () => { + const field = createDmmfFieldFixture({ + kind: "object", + type: "Role" + }); + // @ts-ignore + field.model.name = "User"; + expect(transformScalarToType(field)).toEqual("RoleModel | null"); + expect(field.model.addImportDeclaration).toHaveBeenCalledWith("./RoleModel", "RoleModel"); + }); +}); diff --git a/packages/orm/prisma/src/generator/transform/transformScalarToType.ts b/packages/orm/prisma/src/generator/transform/transformScalarToType.ts new file mode 100644 index 00000000000..6b9f6ace5df --- /dev/null +++ b/packages/orm/prisma/src/generator/transform/transformScalarToType.ts @@ -0,0 +1,43 @@ +import {DmmfField} from "../domain/DmmfField"; +import {DmmfModel} from "../domain/DmmfModel"; +import {ScalarTsTypes} from "../domain/ScalarTsTypes"; +import {DmmfEnum} from "../domain/DmmfEnum"; + +export function transformScalarToType(field: DmmfField) { + const {isRequired, isNullable, type, isList, location, model} = field; + let TSType: string = type; + + switch (location) { + case "scalar": + TSType = ScalarTsTypes[field.type]; + break; + case "enumTypes": + TSType = DmmfEnum.symbolName(type); + field.model.addImportDeclaration(`../enums`, DmmfEnum.symbolName(field.type)); + break; + case "inputObjectTypes": + TSType = DmmfModel.symbolName(type); + + if (field.model.name !== field.type) { + field.model.addImportDeclaration(`./${DmmfModel.symbolName(field.type)}`, DmmfModel.symbolName(field.type)); + } + + break; + } + + if (isList) { + TSType += "[]"; + } + + if (!isRequired) { + if (model.isInputType) { + TSType += " | undefined"; + } else { + TSType += " | null"; + } + } else if (isNullable && !isList) { + TSType += " | null"; + } + + return TSType; +} diff --git a/packages/orm/prisma/src/generator/utils/generateClientIndex.ts b/packages/orm/prisma/src/generator/utils/generateClientIndex.ts new file mode 100644 index 00000000000..7203fc6d704 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateClientIndex.ts @@ -0,0 +1,12 @@ +import {Project} from "ts-morph"; +import path from "path"; +import {GenerateCodeOptions} from "../generateCode"; + +export function generateClientIndex(project: Project, baseDirPath: string, options: GenerateCodeOptions) { + const directory = project.createDirectory(path.resolve(baseDirPath, "client")); + const indexFile = directory.createSourceFile("index.ts", undefined, {overwrite: true}); + + indexFile.addExportDeclarations([ + {moduleSpecifier: options.prismaClientPath.includes("@prisma/client") ? options.prismaClientPath : `../${options.prismaClientPath}`} + ]); +} diff --git a/packages/orm/prisma/src/generator/utils/generateDocuments.ts b/packages/orm/prisma/src/generator/utils/generateDocuments.ts new file mode 100644 index 00000000000..6c58bfb1001 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateDocuments.ts @@ -0,0 +1,20 @@ +import {Directory, SourceFile, StatementStructures} from "ts-morph"; + +export function generateDocuments( + documents: any[], + directory: Directory, + transform: (document: T, sourceFile: SourceFile) => StatementStructures +): string[] { + return documents.map((document) => { + const sourceFile = directory.createSourceFile(`${document.toString()}.ts`, undefined, {overwrite: true}); + const statements = transform(document, sourceFile); + + if (document.importDeclarations) { + sourceFile.addImportDeclarations(document.importDeclarations); + } + + sourceFile.addStatements([statements]); + + return document.toString(); + }); +} diff --git a/packages/orm/prisma/src/generator/utils/generateEnums.spec.ts b/packages/orm/prisma/src/generator/utils/generateEnums.spec.ts new file mode 100644 index 00000000000..973575e2b5d --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateEnums.spec.ts @@ -0,0 +1,15 @@ +import {createProjectFixture} from "../../__mock__/createProjectFixture"; +import {generateModels} from "./generateModels"; +import {createDmmfFixture} from "../../__mock__/createDmmfFixture"; +import {generateEnums} from "./generateEnums"; + +describe("generateEnums", () => { + it("should generate filese", () => { + const {project, render, baseDir} = createProjectFixture("generate_enums"); + const dmmf = createDmmfFixture(); + + generateEnums(dmmf, project, baseDir); + + render("/enums/Role.ts").toEqualSnapshot(); + }); +}); diff --git a/packages/orm/prisma/src/generator/utils/generateEnums.ts b/packages/orm/prisma/src/generator/utils/generateEnums.ts new file mode 100644 index 00000000000..acfa7dedfc9 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateEnums.ts @@ -0,0 +1,24 @@ +import {DMMF} from "@prisma/generator-helper"; +import {Project} from "ts-morph"; +import {toMap} from "@tsed/core"; +import {DmmfEnum} from "../domain/DmmfEnum"; +import path from "path"; +import {generateDocuments} from "./generateDocuments"; +import {transformEnumsToEnums} from "../transform/transformEnumsToEnums"; +import {generateOutputsBarrelFile} from "./generateOutputsBarrelFile"; + +export function generateEnums(dmmf: DMMF.Document, project: Project, baseDirPath: string): boolean { + const enumsMap = toMap(dmmf.datamodel.enums, "name"); + const enums = DmmfEnum.getEnums(dmmf, enumsMap); + const enumsDirPath = path.resolve(baseDirPath, "enums"); + const enumsDirectory = project.createDirectory(enumsDirPath); + const enumsIndex = enumsDirectory.createSourceFile(`index.ts`, undefined, {overwrite: true}); + + const exportedEnums = generateDocuments(enums, enumsDirectory, (document) => transformEnumsToEnums(document)); + + if (enums.length) { + return !!generateOutputsBarrelFile(enumsIndex, exportedEnums); + } + + return false; +} diff --git a/packages/orm/prisma/src/generator/utils/generateIndex.ts b/packages/orm/prisma/src/generator/utils/generateIndex.ts new file mode 100644 index 00000000000..608d08a96e9 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateIndex.ts @@ -0,0 +1,26 @@ +import {Project} from "ts-morph"; +import path from "path"; + +export function generateIndex(project: Project, baseDirPath: string, hasEnum: boolean) { + const indexFile = path.resolve(baseDirPath, "index.ts"); + + project.createSourceFile(indexFile, undefined, {overwrite: true}).addExportDeclarations( + [ + { + moduleSpecifier: "./interfaces" + }, + hasEnum && { + moduleSpecifier: "./enums" + }, + { + moduleSpecifier: "./models" + }, + { + moduleSpecifier: "./services/PrismaService" + }, + { + moduleSpecifier: "./repositories" + } + ].filter(Boolean) as any[] + ); +} diff --git a/packages/orm/prisma/src/generator/utils/generateInterfaces.ts b/packages/orm/prisma/src/generator/utils/generateInterfaces.ts new file mode 100644 index 00000000000..bf13bec0d55 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateInterfaces.ts @@ -0,0 +1,31 @@ +import {ModuleDeclarationKind, Project, StructureKind} from "ts-morph"; +import path from "path"; + +export function generateInterfaces(project: Project, baseDirPath: string) { + const directory = project.createDirectory(path.resolve(baseDirPath, "interfaces")); + const indexFile = directory.createSourceFile("index.ts", undefined, {overwrite: true}); + + indexFile.addImportDeclaration({ + kind: StructureKind.ImportDeclaration, + moduleSpecifier: "../client", + namedImports: ["Prisma"] + }); + + indexFile + .addModule({ + name: "", + hasDeclareKeyword: true, + declarationKind: ModuleDeclarationKind.Global + }) + .addModule({ + name: "TsED" + }) + .addInterface({ + name: "Configuration" + }) + .addProperty({ + name: "prisma", + hasQuestionToken: true, + type: "Prisma.PrismaClientOptions" + }); +} diff --git a/packages/orm/prisma/src/generator/utils/generateModels.spec.ts b/packages/orm/prisma/src/generator/utils/generateModels.spec.ts new file mode 100644 index 00000000000..247c5d8fba9 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateModels.spec.ts @@ -0,0 +1,15 @@ +import {createProjectFixture} from "../../__mock__/createProjectFixture"; +import {generateModels} from "./generateModels"; +import {createDmmfFixture} from "../../__mock__/createDmmfFixture"; + +describe("generateModels", () => { + it("should generate models", () => { + const {project, render, baseDir} = createProjectFixture("generate_models"); + const dmmf = createDmmfFixture(); + + generateModels(dmmf, project, baseDir); + + render("/models/UserModel.ts").toEqualSnapshot(); + render("/models/PostModel.ts").toEqualSnapshot(); + }); +}); diff --git a/packages/orm/prisma/src/generator/utils/generateModels.ts b/packages/orm/prisma/src/generator/utils/generateModels.ts new file mode 100644 index 00000000000..f5270f0ba07 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateModels.ts @@ -0,0 +1,25 @@ +import {DMMF} from "@prisma/generator-helper"; +import {Project} from "ts-morph"; +import {toMap} from "@tsed/core"; +import path from "path"; +import {DmmfModel} from "../domain/DmmfModel"; +import {generateDocuments} from "./generateDocuments"; +import {transformModelToClass} from "../transform/transformModelToClass"; +import {generateOutputsBarrelFile} from "./generateOutputsBarrelFile"; + +export function generateModels(dmmf: DMMF.Document, project: Project, baseDirPath: string) { + const modelsMap = toMap(dmmf.datamodel.models, "name"); + const models = DmmfModel.getModels(dmmf, modelsMap); + const modelsDirPath = path.resolve(baseDirPath, "models"); + const modelsDirectory = project.createDirectory(modelsDirPath); + const modelsIndex = modelsDirectory.createSourceFile(`index.ts`, undefined, {overwrite: true}); + + const exportedModels = generateDocuments(models, modelsDirectory, (model, sourceFile) => { + return transformModelToClass(model, { + dmmf, + modelsMap + }); + }); + + generateOutputsBarrelFile(modelsIndex, exportedModels); +} diff --git a/packages/orm/prisma/src/generator/utils/generateOutputsBarrelFile.ts b/packages/orm/prisma/src/generator/utils/generateOutputsBarrelFile.ts new file mode 100644 index 00000000000..6f3b2452b9c --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateOutputsBarrelFile.ts @@ -0,0 +1,12 @@ +import {ExportDeclarationStructure, OptionalKind, SourceFile} from "ts-morph"; + +export function generateOutputsBarrelFile(sourceFile: SourceFile, outputTypeNames: string[]) { + sourceFile.addExportDeclarations( + outputTypeNames.sort().map>((outputTypeName) => ({ + moduleSpecifier: `./${outputTypeName}`, + namedExports: [outputTypeName] + })) + ); + + return sourceFile; +} diff --git a/packages/orm/prisma/src/generator/utils/generatePrismaService.spec.ts b/packages/orm/prisma/src/generator/utils/generatePrismaService.spec.ts new file mode 100644 index 00000000000..5599fe570ca --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generatePrismaService.spec.ts @@ -0,0 +1,12 @@ +import {generatePrismaService} from "./generatePrismaService"; +import {createProjectFixture} from "../../__mock__/createProjectFixture"; + +describe("generatePrismaService", () => { + it("should generate prisma service", () => { + const {project, render, baseDir} = createProjectFixture("generate_prisma_service"); + + generatePrismaService(project, baseDir); + + render("/services/PrismaService.ts").toEqualSnapshot(); + }); +}); diff --git a/packages/orm/prisma/src/generator/utils/generatePrismaService.ts b/packages/orm/prisma/src/generator/utils/generatePrismaService.ts new file mode 100644 index 00000000000..d91780b609f --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generatePrismaService.ts @@ -0,0 +1,88 @@ +import {Project, Scope} from "ts-morph"; +import path from "path"; + +export function generatePrismaService(project: Project, baseDirPath: string) { + const directory = project.createDirectory(path.resolve(baseDirPath, "services")); + const prismaServiceFile = directory.createSourceFile("PrismaService.ts", "", {overwrite: true}); + + prismaServiceFile.addImportDeclarations([ + { + moduleSpecifier: "@tsed/di", + namedImports: ["Inject", "Injectable", "Configuration", "OnInit", "OnDestroy"] + }, + { + moduleSpecifier: "@tsed/logger", + namedImports: ["Logger"] + }, + { + moduleSpecifier: "../client", + namedImports: ["PrismaClient"] + } + ]); + + const prismaService = prismaServiceFile.addClass({ + name: "PrismaService", + isExported: true, + decorators: [ + { + name: "Injectable", + arguments: [] + } + ], + extends: "PrismaClient", + implements: ["OnInit", "OnDestroy"] + }); + + prismaService.addProperty({ + name: "logger", + scope: Scope.Protected, + type: "Logger", + decorators: [ + { + name: "Inject", + arguments: [] + } + ] + }); + + prismaService + .addConstructor({ + parameters: [ + { + name: "settings", + type: "Configuration", + decorators: [ + { + name: "Configuration", + arguments: [] + } + ] + } + ] + }) + .setBodyText("super(settings.get('prisma'));"); + + prismaService + .addMethod({ + name: "$onInit", + isAsync: true, + returnType: "Promise" + }) + .setBodyText( + `this.logger.info("Connection to prisma database"); + await this.$connect();` + ); + + prismaService + .addMethod({ + name: "$onDestroy", + isAsync: true, + returnType: "Promise" + }) + .setBodyText( + `this.logger.info("Disconnection from prisma database"); + await this.$disconnect();` + ); + + return prismaService; +} diff --git a/packages/orm/prisma/src/generator/utils/generateRepositories.ts b/packages/orm/prisma/src/generator/utils/generateRepositories.ts new file mode 100644 index 00000000000..89769b28d0c --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateRepositories.ts @@ -0,0 +1,201 @@ +import {DMMF} from "@prisma/generator-helper"; +import {ClassDeclaration, Project, Scope} from "ts-morph"; +import {toMap} from "@tsed/core"; +import path from "path"; +import {DmmfModel} from "../domain/DmmfModel"; +import {generateOutputsBarrelFile} from "./generateOutputsBarrelFile"; +import pluralize from "pluralize"; +import {pascalCase, camelCase} from "change-case"; + +interface MethodOptions { + repository: ClassDeclaration; + name: string; + model: string; + returnType?: string | undefined; + hasQuestionToken?: boolean; +} + +function addDelegatedMethod({name, hasQuestionToken, repository, model, returnType}: MethodOptions) { + const method = repository.addMethod({ + name: name, + isAsync: true, + returnType: returnType ? `Promise<${returnType}>` : undefined, + parameters: [ + { + name: "args", + type: `Prisma.${model}${pascalCase(name)}Args`, + hasQuestionToken + } + ] + }); + + if (returnType) { + method.setBodyText(`const obj = await this.collection.${name}(args); + return this.deserialize<${returnType}>(obj);`); + } else { + method.setBodyText(`return this.collection.${name}(args)`); + } +} + +export function generateRepositories(dmmf: DMMF.Document, project: Project, baseDirPath: string) { + const modelsMap = toMap(dmmf.datamodel.models, "name"); + const models = DmmfModel.getModels(dmmf, modelsMap); + const repoDirPath = path.resolve(baseDirPath, "repositories"); + const repoDirectory = project.createDirectory(repoDirPath); + const repositoriesIndex = repoDirectory.createSourceFile(`index.ts`, undefined, {overwrite: true}); + + const exportedModels = models.map((model) => { + const name = `${pluralize(model.name)}Repository`; + const modelName = model.toString(); + const sourceFile = repoDirectory.createSourceFile(`${name}.ts`, undefined, {overwrite: true}); + + sourceFile.addImportDeclarations([ + { + moduleSpecifier: "@tsed/core", + namedImports: ["isArray"] + }, + { + moduleSpecifier: "@tsed/json-mapper", + namedImports: ["deserialize"] + }, + { + moduleSpecifier: "@tsed/di", + namedImports: ["Injectable", "Inject"] + }, + { + moduleSpecifier: "../services/PrismaService", + namedImports: ["PrismaService"] + }, + { + moduleSpecifier: "../client", + namedImports: ["Prisma", model.name] + }, + { + moduleSpecifier: "../models", + namedImports: [model.toString()] + } + ]); + + const repository = sourceFile.addClass({ + name, + isExported: true, + decorators: [ + { + name: "Injectable", + arguments: [] + } + ] + }); + + repository.addProperty({ + name: "prisma", + type: "PrismaService", + scope: Scope.Protected, + decorators: [ + { + name: "Inject", + arguments: [] + } + ] + }); + + repository + .addGetAccessor({ + name: "collection" + }) + .setBodyText(`return this.prisma.${camelCase(model.name)}`); + + repository + .addGetAccessor({ + name: "groupBy" + }) + .setBodyText(`return this.collection.groupBy.bind(this.collection)`); + + repository + .addMethod({ + name: "deserialize", + scope: Scope.Protected, + returnType: "T", + parameters: [ + { + name: "obj", + type: `null | ${model.name} | ${model.name}[]` + } + ], + typeParameters: ["T"] + }) + .setBodyText(`return deserialize(obj, {type: ${modelName}, collectionType: isArray(obj) ? Array : undefined})`); + + addDelegatedMethod({ + repository, + name: "findUnique", + model: model.name, + returnType: `${modelName} | null` + }); + + addDelegatedMethod({ + repository, + name: "findFirst", + model: model.name, + returnType: `${modelName} | null` + }); + + addDelegatedMethod({ + repository, + name: "findMany", + model: model.name, + returnType: `${modelName}[]`, + hasQuestionToken: true + }); + + addDelegatedMethod({ + repository, + name: "create", + model: model.name, + returnType: `${modelName}` + }); + + addDelegatedMethod({ + repository, + name: "update", + model: model.name, + returnType: `${modelName}` + }); + + addDelegatedMethod({ + repository, + name: "upsert", + model: model.name, + returnType: `${modelName}` + }); + + addDelegatedMethod({ + repository, + name: "delete", + model: model.name, + returnType: `${modelName}` + }); + + addDelegatedMethod({ + repository, + name: "deleteMany", + model: model.name + }); + + addDelegatedMethod({ + repository, + name: "updateMany", + model: model.name + }); + + addDelegatedMethod({ + repository, + name: "aggregate", + model: model.name + }); + + return name; + }); + + generateOutputsBarrelFile(repositoriesIndex, exportedModels); +} diff --git a/packages/orm/prisma/src/generator/utils/generateRespositories.spec.ts b/packages/orm/prisma/src/generator/utils/generateRespositories.spec.ts new file mode 100644 index 00000000000..34477b92cd9 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/generateRespositories.spec.ts @@ -0,0 +1,22 @@ +import {createProjectFixture} from "../../__mock__/createProjectFixture"; +import {createDmmfFixture} from "../../__mock__/createDmmfFixture"; +import {generateRepositories} from "./generateRepositories"; + +describe("generateRepositories", () => { + it("should generate repositories", () => { + const {project, render, baseDir} = createProjectFixture("generate_repositories"); + const dmmf = createDmmfFixture(); + + generateRepositories(dmmf, project, baseDir); + + const userRepo = render("/repositories/UsersRepository.ts"); + + userRepo.not.toContain("Post"); + userRepo.toEqualSnapshot(); + + const postsRepository = render("/repositories/PostsRepository.ts"); + + postsRepository.not.toContain("User"); + postsRepository.toEqualSnapshot(); + }); +}); diff --git a/packages/orm/prisma/src/generator/utils/isCircularRef.spec.ts b/packages/orm/prisma/src/generator/utils/isCircularRef.spec.ts new file mode 100644 index 00000000000..d5b2faa7df0 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/isCircularRef.spec.ts @@ -0,0 +1,22 @@ +import {isCircularRef} from "./isCircularRef"; +import {createContextFixture} from "../../__mock__/createContextFixture"; + +const ctx = createContextFixture(); + +describe("isCircularRef()", () => { + it("should return true (self-ref)", () => { + expect(isCircularRef("User", "User", ctx)).toEqual(true); + }); + it("should return true (circular-ref)", () => { + expect(isCircularRef("User", "Role", ctx)).toEqual(true); + }); + it("should return true (transitive ref)", () => { + expect(isCircularRef("User", "Transitive", ctx)).toEqual(true); + }); + it("should return false", () => { + expect(isCircularRef("User", "Other", ctx)).toEqual(false); + }); + it("should return false (transitive)", () => { + expect(isCircularRef("User", "Hello", ctx)).toEqual(false); + }); +}); diff --git a/packages/orm/prisma/src/generator/utils/isCircularRef.ts b/packages/orm/prisma/src/generator/utils/isCircularRef.ts new file mode 100644 index 00000000000..1bc51707c6c --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/isCircularRef.ts @@ -0,0 +1,31 @@ +import {TransformContext} from "../domain/TransformContext"; +import {DMMF} from "@prisma/generator-helper"; + +export function isCircularRef(modelName: string, fieldType: string, ctx: TransformContext): boolean { + if (modelName === fieldType) { + return true; + } + + const relation1 = ctx.modelsMap.get(modelName); + const relation2 = ctx.modelsMap.get(fieldType); + + return Boolean(relation1 && relation2 && hasModelInFields(relation1, fieldType, ctx) && hasModelInFields(relation2, modelName, ctx)); +} + +function hasModelInFields(model: DMMF.Model, relation: string, ctx: TransformContext, inspected: string[] = []): boolean { + return !!model.fields.find((field) => { + if (field.type === relation) { + return true; + } + + if (!inspected.includes(field.type)) { + const nextModel = ctx.modelsMap.get(field.type); + + if (nextModel) { + return hasModelInFields(nextModel, relation, ctx, [...inspected, field.type]); + } + } + + return false; + }); +} diff --git a/packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.spec.ts b/packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.spec.ts new file mode 100644 index 00000000000..7de9e340ab5 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.spec.ts @@ -0,0 +1,53 @@ +import {parseDocumentationAttributes} from "./parseDocumentationAttributes"; + +describe("parseDocumentationAttributes", () => { + it("should parse @TsED.Email()", () => { + expect(parseDocumentationAttributes("/// @TsED.Email()")).toEqual([ + { + arguments: [], + content: "@TsED.Email()", + name: "Email" + } + ]); + }); + + it("should parse @TsED.Ignore(endpoint = true)", () => { + expect(parseDocumentationAttributes("/// @TsED.Ignore(ctx.endpoint === true)")).toEqual([ + { + arguments: ["(value: any, ctx: any) => ctx.endpoint === true"], + content: "@TsED.Ignore(ctx.endpoint === true)", + name: "Ignore" + } + ]); + }); + + it('should parse @TsED.Groups("!creation")', () => { + expect(parseDocumentationAttributes('/// @TsED.Groups("!creation")')).toEqual([ + { + arguments: ['"!creation"'], + content: '@TsED.Groups("!creation")', + name: "Groups" + } + ]); + }); + it('should parse @TsED.Groups(type: "test")', () => { + expect(parseDocumentationAttributes('/// @TsED.Groups(type: "test")')).toEqual([ + { + arguments: [ + { + type: "test" + } + ], + content: '@TsED.Groups(type: "test")', + name: "Groups" + } + ]); + }); + it("should ignore other comments", () => { + expect(parseDocumentationAttributes("/// comments")).toEqual([]); + }); + + it("should ignore undefined comment", () => { + expect(parseDocumentationAttributes(undefined)).toEqual([]); + }); +}); diff --git a/packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.ts b/packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.ts new file mode 100644 index 00000000000..898b8434a74 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/parseDocumentationAttributes.ts @@ -0,0 +1,64 @@ +export const attributeRegex = /(@TsED\.)+([A-z])+(\()(.*)(\))+/; +export const attributeNameRegex = /(?:\.)+([A-Za-z])+(?:\()+/; +export const attributeArgsRegex = /(?:\()+([A-Za-z])+\:+(.+)+(?:\))+/; +export const argsRegex = /(?:\()+((.+))+(?:\))+/; + +export function parseDocumentationAttributes(documentation: string | undefined): {name: string; content: string; arguments: string[]}[] { + if (!documentation) { + return []; + } + + return documentation + .split("\n") + .map((current) => { + const attribute = current.match(attributeRegex)?.[0]; + + if (!attribute) { + return; + } + + const attributeName = current.match(attributeNameRegex)?.[0]?.slice(1, -1); + const rawAttributeArgs = attribute.match(attributeArgsRegex)?.[0]?.slice(1, -1); + const args: any[] = []; + + if (rawAttributeArgs) { + const splitRawArgsArray = rawAttributeArgs.split(",").map((it) => it.trim()); + const parsedAttributeArgs = + splitRawArgsArray && + (Object.fromEntries( + splitRawArgsArray.map((it) => { + const [key, value] = it.split(": "); + return [key, JSON.parse(value)]; + }) + ) as Partial); + + args.push(parsedAttributeArgs); + } else { + const inputs = attribute + .match(argsRegex)?.[0] + ?.slice(1, -1) + ?.split(",") + .map((it) => it.trim()); + + args.push(...(inputs || [])); + } + + return { + name: attributeName, + content: attribute, + arguments: args + }; + }) + .map((options) => { + if (options?.name === "Ignore") { + const args = options.arguments.join(" && "); + + return { + ...options, + arguments: [`(value: any, ctx: any) => ${args}`] + }; + } + return options; + }) + .filter(Boolean) as any[]; +} diff --git a/packages/orm/prisma/src/generator/utils/removeDir.ts b/packages/orm/prisma/src/generator/utils/removeDir.ts new file mode 100644 index 00000000000..b61540793d0 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/removeDir.ts @@ -0,0 +1,15 @@ +import path from "path"; +import {promises as fs} from "fs"; + +export default async function removeDir(dirPath: string, onlyContent: boolean) { + const dirEntries = await fs.readdir(dirPath, {withFileTypes: true}); + await Promise.all( + dirEntries.map(async (dirEntry) => { + const fullPath = path.join(dirPath, dirEntry.name); + return dirEntry.isDirectory() ? await removeDir(fullPath, false) : await fs.unlink(fullPath); + }) + ); + if (!onlyContent) { + await fs.rmdir(dirPath); + } +} diff --git a/packages/orm/prisma/src/generator/utils/saveProject.ts b/packages/orm/prisma/src/generator/utils/saveProject.ts new file mode 100644 index 00000000000..3b5ebdff910 --- /dev/null +++ b/packages/orm/prisma/src/generator/utils/saveProject.ts @@ -0,0 +1,8 @@ +import {Project} from "ts-morph"; + +export async function saveProject(project: Project) { + for (const file of project.getSourceFiles()) { + file.formatText({indentSize: 2}); + } + await project.save(); +} diff --git a/packages/orm/prisma/src/index.ts b/packages/orm/prisma/src/index.ts new file mode 100644 index 00000000000..e84bb53f889 --- /dev/null +++ b/packages/orm/prisma/src/index.ts @@ -0,0 +1 @@ +export * from "./generator"; diff --git a/packages/orm/prisma/test/package-lock.json b/packages/orm/prisma/test/package-lock.json new file mode 100644 index 00000000000..c9f3a033a41 --- /dev/null +++ b/packages/orm/prisma/test/package-lock.json @@ -0,0 +1,35 @@ +{ + "name": "@tsed/prisma-test", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@prisma/client": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-2.22.1.tgz", + "integrity": "sha512-JQjbsY6QSfFiovXHEp5WeJHa5p2CuR1ZFPAeYXmUsOAQOaMCrhgQmKAL6w2Q3SRA7ALqPjrKywN9/QfBc4Kp1A==", + "requires": { + "@prisma/engines-version": "2.22.0-21.60cc71d884972ab4e897f0277c4b84383dddaf6c" + } + }, + "@prisma/engines": { + "version": "2.22.0-21.60cc71d884972ab4e897f0277c4b84383dddaf6c", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-2.22.0-21.60cc71d884972ab4e897f0277c4b84383dddaf6c.tgz", + "integrity": "sha512-KmWdogrsfsSLYvfqY3cS3QcDGzaEFklE+T6dNJf+k/KPQum4A29IwDalafMwh5cMN8ivZobUbowNSwWJrMT08Q==", + "dev": true + }, + "@prisma/engines-version": { + "version": "2.22.0-21.60cc71d884972ab4e897f0277c4b84383dddaf6c", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-2.22.0-21.60cc71d884972ab4e897f0277c4b84383dddaf6c.tgz", + "integrity": "sha512-OkkVwk6iTzTbwwl8JIKAENyxmh4TFORal55QMKQzrHEY8UzbD0M90mQnmziz3PAopQUZgTFFMlaPAq1WNrLMtA==" + }, + "prisma": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-2.22.1.tgz", + "integrity": "sha512-hwvCM3zyxgSda/+/p+GW7nz93jRebtMU01wAG7YVVnl0OKU+dpw1wPvPFmQRldkZHk8fTCleYmjc24WaSdVPZQ==", + "dev": true, + "requires": { + "@prisma/engines": "2.22.0-21.60cc71d884972ab4e897f0277c4b84383dddaf6c" + } + } + } +} diff --git a/packages/orm/prisma/test/package.json b/packages/orm/prisma/test/package.json new file mode 100644 index 00000000000..a045c45ad51 --- /dev/null +++ b/packages/orm/prisma/test/package.json @@ -0,0 +1,9 @@ +{ + "name": "@tsed/prisma-test", + "devDependencies": { + "prisma": "^3.10.0" + }, + "dependencies": { + "@prisma/client": "^3.10.0" + } +} diff --git a/packages/orm/prisma/test/prisma/schema.prisma b/packages/orm/prisma/test/prisma/schema.prisma new file mode 100644 index 00000000000..e08dadb001e --- /dev/null +++ b/packages/orm/prisma/test/prisma/schema.prisma @@ -0,0 +1,51 @@ + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" + binaryTargets = ["native", "windows", "debian-openssl-1.1.x"] + output = "../prisma/generated/client" + previewFeatures = ["orderByRelation", "napi", "selectRelationCount"] +} + +generator tsed { + provider = "node ../src/cli/dev.ts" + output = "../prisma/generated/tsed" + emitDMMF = true +} + +model User { + /// @TsED.Groups("!creation") + /// Comment + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + /// @TsED.Email() + /// @TsED.Description("User email. This email must be unique!") + email String @unique + weight Float? + is18 Boolean? + name String? + successorId Int? + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") + role Role @default(USER) + posts Post[] + keywords String[] + biography Json + /// @TsED.Ignore(ctx.endpoint === true) + ignored String +} + +model Post { + id Int @id @default(autoincrement()) + user User? @relation(fields: [userId], references: [id]) + userId Int? +} + +enum Role { + USER + ADMIN +} diff --git a/packages/orm/prisma/test/snapshots/generate_code/client/index.ts b/packages/orm/prisma/test/snapshots/generate_code/client/index.ts new file mode 100644 index 00000000000..fcab163dab9 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/client/index.ts @@ -0,0 +1 @@ +export * from "@prisma/client"; diff --git a/packages/orm/prisma/test/snapshots/generate_code/enums/Role.ts b/packages/orm/prisma/test/snapshots/generate_code/enums/Role.ts new file mode 100644 index 00000000000..f1909355ca9 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/enums/Role.ts @@ -0,0 +1,5 @@ + +export enum Role { + USER = "USER", + ADMIN = "ADMIN" +} diff --git a/packages/orm/prisma/test/snapshots/generate_code/enums/index.ts b/packages/orm/prisma/test/snapshots/generate_code/enums/index.ts new file mode 100644 index 00000000000..a6b89e5435d --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/enums/index.ts @@ -0,0 +1 @@ +export { Role } from "./Role"; diff --git a/packages/orm/prisma/test/snapshots/generate_code/index.ts b/packages/orm/prisma/test/snapshots/generate_code/index.ts new file mode 100644 index 00000000000..d3f117a9af6 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/index.ts @@ -0,0 +1,5 @@ +export * from "./interfaces"; +export * from "./enums"; +export * from "./models"; +export * from "./services/PrismaService"; +export * from "./repositories"; diff --git a/packages/orm/prisma/test/snapshots/generate_code/interfaces/index.ts b/packages/orm/prisma/test/snapshots/generate_code/interfaces/index.ts new file mode 100644 index 00000000000..d144776d1e4 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/interfaces/index.ts @@ -0,0 +1,9 @@ +import { Prisma } from "../client"; + +declare global { + namespace TsED { + interface Configuration { + prisma?: Prisma.PrismaClientOptions; + } + } +} diff --git a/packages/orm/prisma/test/snapshots/generate_code/models/PostModel.ts b/packages/orm/prisma/test/snapshots/generate_code/models/PostModel.ts new file mode 100644 index 00000000000..0174b3721a8 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/models/PostModel.ts @@ -0,0 +1,20 @@ +import { Post } from "../client"; +import { Integer, Required, Property, Allow } from "@tsed/schema"; +import { UserModel } from "./UserModel"; + +export class PostModel implements Post { + @Property(Number) + @Integer() + @Required() + id: number; + + @Property(() => UserModel) + @Allow(null) + user: UserModel | null; + + @Property(Number) + @Integer() + @Allow(null) + userId: number | null; +} + diff --git a/packages/orm/prisma/test/snapshots/generate_code/models/UserModel.ts b/packages/orm/prisma/test/snapshots/generate_code/models/UserModel.ts new file mode 100644 index 00000000000..d83929c2582 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/models/UserModel.ts @@ -0,0 +1,65 @@ +import { User } from "../client"; +import { Integer, Required, Property, Groups, Format, Email, Description, Allow, Enum, CollectionOf } from "@tsed/schema"; +import { Role } from "../enums"; +import { PostModel } from "./PostModel"; + +export class UserModel implements User { + @Property(Number) + @Integer() + @Required() + @Groups("!creation") + id: number; + + @Property(Date) + @Format("date-time") + @Required() + createdAt: Date; + + @Property(String) + @Required() + @Email() + @Description("User email. This email must be unique!") + email: string; + + @Property(Number) + @Allow(null) + weight: number | null; + + @Property(Boolean) + @Allow(null) + is18: boolean | null; + + @Property(String) + @Allow(null) + name: string | null; + + @Property(Number) + @Integer() + @Allow(null) + successorId: number | null; + + @Property(() => UserModel) + @Allow(null) + successor: UserModel | null; + + @Property(() => UserModel) + @Allow(null) + predecessor: UserModel | null; + + @Required() + @Enum(Role) + role: Role; + + @CollectionOf(() => PostModel) + @Required() + posts: PostModel[]; + + @CollectionOf(String) + @Required() + keywords: string[]; + + @Property(Object) + @Required() + biography: any; +} + diff --git a/packages/orm/prisma/test/snapshots/generate_code/models/index.ts b/packages/orm/prisma/test/snapshots/generate_code/models/index.ts new file mode 100644 index 00000000000..3090a3fa09f --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/models/index.ts @@ -0,0 +1,2 @@ +export { PostModel } from "./PostModel"; +export { UserModel } from "./UserModel"; diff --git a/packages/orm/prisma/test/snapshots/generate_code/repositories/PostsRepository.ts b/packages/orm/prisma/test/snapshots/generate_code/repositories/PostsRepository.ts new file mode 100644 index 00000000000..f992bd0bfc8 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/repositories/PostsRepository.ts @@ -0,0 +1,71 @@ +import { isArray } from "@tsed/core"; +import { deserialize } from "@tsed/json-mapper"; +import { Injectable, Inject } from "@tsed/di"; +import { PrismaService } from "../services/PrismaService"; +import { Prisma, Post } from "../client"; +import { PostModel } from "../models"; + +@Injectable() +export class PostsRepository { + @Inject() + protected prisma: PrismaService; + + get collection() { + return this.prisma.post + } + + get groupBy() { + return this.collection.groupBy.bind(this.collection) + } + + protected deserialize(obj: null | Post | Post[]): T { + return deserialize(obj, { type: PostModel, collectionType: isArray(obj) ? Array : undefined }) + } + + async findUnique(args: Prisma.PostFindUniqueArgs): Promise { + const obj = await this.collection.findUnique(args); + return this.deserialize(obj); + } + + async findFirst(args: Prisma.PostFindFirstArgs): Promise { + const obj = await this.collection.findFirst(args); + return this.deserialize(obj); + } + + async findMany(args?: Prisma.PostFindManyArgs): Promise { + const obj = await this.collection.findMany(args); + return this.deserialize(obj); + } + + async create(args: Prisma.PostCreateArgs): Promise { + const obj = await this.collection.create(args); + return this.deserialize(obj); + } + + async update(args: Prisma.PostUpdateArgs): Promise { + const obj = await this.collection.update(args); + return this.deserialize(obj); + } + + async upsert(args: Prisma.PostUpsertArgs): Promise { + const obj = await this.collection.upsert(args); + return this.deserialize(obj); + } + + async delete(args: Prisma.PostDeleteArgs): Promise { + const obj = await this.collection.delete(args); + return this.deserialize(obj); + } + + async deleteMany(args: Prisma.PostDeleteManyArgs) { + return this.collection.deleteMany(args) + } + + async updateMany(args: Prisma.PostUpdateManyArgs) { + return this.collection.updateMany(args) + } + + async aggregate(args: Prisma.PostAggregateArgs) { + return this.collection.aggregate(args) + } +} diff --git a/packages/orm/prisma/test/snapshots/generate_code/repositories/UsersRepository.ts b/packages/orm/prisma/test/snapshots/generate_code/repositories/UsersRepository.ts new file mode 100644 index 00000000000..0d2a02468bb --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/repositories/UsersRepository.ts @@ -0,0 +1,71 @@ +import { isArray } from "@tsed/core"; +import { deserialize } from "@tsed/json-mapper"; +import { Injectable, Inject } from "@tsed/di"; +import { PrismaService } from "../services/PrismaService"; +import { Prisma, User } from "../client"; +import { UserModel } from "../models"; + +@Injectable() +export class UsersRepository { + @Inject() + protected prisma: PrismaService; + + get collection() { + return this.prisma.user + } + + get groupBy() { + return this.collection.groupBy.bind(this.collection) + } + + protected deserialize(obj: null | User | User[]): T { + return deserialize(obj, { type: UserModel, collectionType: isArray(obj) ? Array : undefined }) + } + + async findUnique(args: Prisma.UserFindUniqueArgs): Promise { + const obj = await this.collection.findUnique(args); + return this.deserialize(obj); + } + + async findFirst(args: Prisma.UserFindFirstArgs): Promise { + const obj = await this.collection.findFirst(args); + return this.deserialize(obj); + } + + async findMany(args?: Prisma.UserFindManyArgs): Promise { + const obj = await this.collection.findMany(args); + return this.deserialize(obj); + } + + async create(args: Prisma.UserCreateArgs): Promise { + const obj = await this.collection.create(args); + return this.deserialize(obj); + } + + async update(args: Prisma.UserUpdateArgs): Promise { + const obj = await this.collection.update(args); + return this.deserialize(obj); + } + + async upsert(args: Prisma.UserUpsertArgs): Promise { + const obj = await this.collection.upsert(args); + return this.deserialize(obj); + } + + async delete(args: Prisma.UserDeleteArgs): Promise { + const obj = await this.collection.delete(args); + return this.deserialize(obj); + } + + async deleteMany(args: Prisma.UserDeleteManyArgs) { + return this.collection.deleteMany(args) + } + + async updateMany(args: Prisma.UserUpdateManyArgs) { + return this.collection.updateMany(args) + } + + async aggregate(args: Prisma.UserAggregateArgs) { + return this.collection.aggregate(args) + } +} diff --git a/packages/orm/prisma/test/snapshots/generate_code/repositories/index.ts b/packages/orm/prisma/test/snapshots/generate_code/repositories/index.ts new file mode 100644 index 00000000000..9a5bbdda0f3 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/repositories/index.ts @@ -0,0 +1,2 @@ +export { PostsRepository } from "./PostsRepository"; +export { UsersRepository } from "./UsersRepository"; diff --git a/packages/orm/prisma/test/snapshots/generate_code/services/PrismaService.ts b/packages/orm/prisma/test/snapshots/generate_code/services/PrismaService.ts new file mode 100644 index 00000000000..439315012b5 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_code/services/PrismaService.ts @@ -0,0 +1,23 @@ +import { Inject, Injectable, Configuration, OnInit, OnDestroy } from "@tsed/di"; +import { Logger } from "@tsed/logger"; +import { PrismaClient } from "../client"; + +@Injectable() +export class PrismaService extends PrismaClient implements OnInit, OnDestroy { + @Inject() + protected logger: Logger; + + constructor(@Configuration() settings: Configuration) { + super(settings.get('prisma')); + } + + async $onInit(): Promise { + this.logger.info("Connection to prisma database"); + await this.$connect(); + } + + async $onDestroy(): Promise { + this.logger.info("Disconnection from prisma database"); + await this.$disconnect(); + } +} diff --git a/packages/orm/prisma/test/snapshots/generate_enums/enums/Role.ts b/packages/orm/prisma/test/snapshots/generate_enums/enums/Role.ts new file mode 100644 index 00000000000..f1909355ca9 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_enums/enums/Role.ts @@ -0,0 +1,5 @@ + +export enum Role { + USER = "USER", + ADMIN = "ADMIN" +} diff --git a/packages/orm/prisma/test/snapshots/generate_models/models/PostModel.ts b/packages/orm/prisma/test/snapshots/generate_models/models/PostModel.ts new file mode 100644 index 00000000000..0174b3721a8 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_models/models/PostModel.ts @@ -0,0 +1,20 @@ +import { Post } from "../client"; +import { Integer, Required, Property, Allow } from "@tsed/schema"; +import { UserModel } from "./UserModel"; + +export class PostModel implements Post { + @Property(Number) + @Integer() + @Required() + id: number; + + @Property(() => UserModel) + @Allow(null) + user: UserModel | null; + + @Property(Number) + @Integer() + @Allow(null) + userId: number | null; +} + diff --git a/packages/orm/prisma/test/snapshots/generate_models/models/UserModel.ts b/packages/orm/prisma/test/snapshots/generate_models/models/UserModel.ts new file mode 100644 index 00000000000..d83929c2582 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_models/models/UserModel.ts @@ -0,0 +1,65 @@ +import { User } from "../client"; +import { Integer, Required, Property, Groups, Format, Email, Description, Allow, Enum, CollectionOf } from "@tsed/schema"; +import { Role } from "../enums"; +import { PostModel } from "./PostModel"; + +export class UserModel implements User { + @Property(Number) + @Integer() + @Required() + @Groups("!creation") + id: number; + + @Property(Date) + @Format("date-time") + @Required() + createdAt: Date; + + @Property(String) + @Required() + @Email() + @Description("User email. This email must be unique!") + email: string; + + @Property(Number) + @Allow(null) + weight: number | null; + + @Property(Boolean) + @Allow(null) + is18: boolean | null; + + @Property(String) + @Allow(null) + name: string | null; + + @Property(Number) + @Integer() + @Allow(null) + successorId: number | null; + + @Property(() => UserModel) + @Allow(null) + successor: UserModel | null; + + @Property(() => UserModel) + @Allow(null) + predecessor: UserModel | null; + + @Required() + @Enum(Role) + role: Role; + + @CollectionOf(() => PostModel) + @Required() + posts: PostModel[]; + + @CollectionOf(String) + @Required() + keywords: string[]; + + @Property(Object) + @Required() + biography: any; +} + diff --git a/packages/orm/prisma/test/snapshots/generate_prisma_service/services/PrismaService.ts b/packages/orm/prisma/test/snapshots/generate_prisma_service/services/PrismaService.ts new file mode 100644 index 00000000000..439315012b5 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_prisma_service/services/PrismaService.ts @@ -0,0 +1,23 @@ +import { Inject, Injectable, Configuration, OnInit, OnDestroy } from "@tsed/di"; +import { Logger } from "@tsed/logger"; +import { PrismaClient } from "../client"; + +@Injectable() +export class PrismaService extends PrismaClient implements OnInit, OnDestroy { + @Inject() + protected logger: Logger; + + constructor(@Configuration() settings: Configuration) { + super(settings.get('prisma')); + } + + async $onInit(): Promise { + this.logger.info("Connection to prisma database"); + await this.$connect(); + } + + async $onDestroy(): Promise { + this.logger.info("Disconnection from prisma database"); + await this.$disconnect(); + } +} diff --git a/packages/orm/prisma/test/snapshots/generate_repositories/repositories/PostsRepository.ts b/packages/orm/prisma/test/snapshots/generate_repositories/repositories/PostsRepository.ts new file mode 100644 index 00000000000..f992bd0bfc8 --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_repositories/repositories/PostsRepository.ts @@ -0,0 +1,71 @@ +import { isArray } from "@tsed/core"; +import { deserialize } from "@tsed/json-mapper"; +import { Injectable, Inject } from "@tsed/di"; +import { PrismaService } from "../services/PrismaService"; +import { Prisma, Post } from "../client"; +import { PostModel } from "../models"; + +@Injectable() +export class PostsRepository { + @Inject() + protected prisma: PrismaService; + + get collection() { + return this.prisma.post + } + + get groupBy() { + return this.collection.groupBy.bind(this.collection) + } + + protected deserialize(obj: null | Post | Post[]): T { + return deserialize(obj, { type: PostModel, collectionType: isArray(obj) ? Array : undefined }) + } + + async findUnique(args: Prisma.PostFindUniqueArgs): Promise { + const obj = await this.collection.findUnique(args); + return this.deserialize(obj); + } + + async findFirst(args: Prisma.PostFindFirstArgs): Promise { + const obj = await this.collection.findFirst(args); + return this.deserialize(obj); + } + + async findMany(args?: Prisma.PostFindManyArgs): Promise { + const obj = await this.collection.findMany(args); + return this.deserialize(obj); + } + + async create(args: Prisma.PostCreateArgs): Promise { + const obj = await this.collection.create(args); + return this.deserialize(obj); + } + + async update(args: Prisma.PostUpdateArgs): Promise { + const obj = await this.collection.update(args); + return this.deserialize(obj); + } + + async upsert(args: Prisma.PostUpsertArgs): Promise { + const obj = await this.collection.upsert(args); + return this.deserialize(obj); + } + + async delete(args: Prisma.PostDeleteArgs): Promise { + const obj = await this.collection.delete(args); + return this.deserialize(obj); + } + + async deleteMany(args: Prisma.PostDeleteManyArgs) { + return this.collection.deleteMany(args) + } + + async updateMany(args: Prisma.PostUpdateManyArgs) { + return this.collection.updateMany(args) + } + + async aggregate(args: Prisma.PostAggregateArgs) { + return this.collection.aggregate(args) + } +} diff --git a/packages/orm/prisma/test/snapshots/generate_repositories/repositories/UsersRepository.ts b/packages/orm/prisma/test/snapshots/generate_repositories/repositories/UsersRepository.ts new file mode 100644 index 00000000000..0d2a02468bb --- /dev/null +++ b/packages/orm/prisma/test/snapshots/generate_repositories/repositories/UsersRepository.ts @@ -0,0 +1,71 @@ +import { isArray } from "@tsed/core"; +import { deserialize } from "@tsed/json-mapper"; +import { Injectable, Inject } from "@tsed/di"; +import { PrismaService } from "../services/PrismaService"; +import { Prisma, User } from "../client"; +import { UserModel } from "../models"; + +@Injectable() +export class UsersRepository { + @Inject() + protected prisma: PrismaService; + + get collection() { + return this.prisma.user + } + + get groupBy() { + return this.collection.groupBy.bind(this.collection) + } + + protected deserialize(obj: null | User | User[]): T { + return deserialize(obj, { type: UserModel, collectionType: isArray(obj) ? Array : undefined }) + } + + async findUnique(args: Prisma.UserFindUniqueArgs): Promise { + const obj = await this.collection.findUnique(args); + return this.deserialize(obj); + } + + async findFirst(args: Prisma.UserFindFirstArgs): Promise { + const obj = await this.collection.findFirst(args); + return this.deserialize(obj); + } + + async findMany(args?: Prisma.UserFindManyArgs): Promise { + const obj = await this.collection.findMany(args); + return this.deserialize(obj); + } + + async create(args: Prisma.UserCreateArgs): Promise { + const obj = await this.collection.create(args); + return this.deserialize(obj); + } + + async update(args: Prisma.UserUpdateArgs): Promise { + const obj = await this.collection.update(args); + return this.deserialize(obj); + } + + async upsert(args: Prisma.UserUpsertArgs): Promise { + const obj = await this.collection.upsert(args); + return this.deserialize(obj); + } + + async delete(args: Prisma.UserDeleteArgs): Promise { + const obj = await this.collection.delete(args); + return this.deserialize(obj); + } + + async deleteMany(args: Prisma.UserDeleteManyArgs) { + return this.collection.deleteMany(args) + } + + async updateMany(args: Prisma.UserUpdateManyArgs) { + return this.collection.updateMany(args) + } + + async aggregate(args: Prisma.UserAggregateArgs) { + return this.collection.aggregate(args) + } +} diff --git a/packages/orm/prisma/tsconfig.compile.esm.json b/packages/orm/prisma/tsconfig.compile.esm.json new file mode 100644 index 00000000000..4d797e85361 --- /dev/null +++ b/packages/orm/prisma/tsconfig.compile.esm.json @@ -0,0 +1,25 @@ +{ + "extends": "./tsconfig.compile.json", + "compilerOptions": { + "baseUrl": ".", + "module": "ES2020", + "rootDir": "src", + "outDir": "./lib/esm", + "declaration": true, + "declarationDir": "./lib/types" + }, + "include": ["src"], + "exclude": [ + "node_modules", + "test", + "lib", + "benchmark", + "coverage", + "spec", + "**/*.benchmark.ts", + "**/*.spec.ts", + "keys", + "jest.config.js", + "scripts" + ] +} diff --git a/packages/orm/prisma/tsconfig.compile.json b/packages/orm/prisma/tsconfig.compile.json new file mode 100644 index 00000000000..0af62b2e55b --- /dev/null +++ b/packages/orm/prisma/tsconfig.compile.json @@ -0,0 +1,22 @@ +{ + "extends": "../../../tsconfig.compile.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib/cjs", + "declaration": false + }, + "include": ["src"], + "exclude": [ + "node_modules", + "test", + "lib", + "benchmark", + "coverage", + "spec", + "**/*.benchmark.ts", + "**/*.spec.ts", + "keys", + "jest.config.js", + "scripts" + ] +} diff --git a/tools/jest/jest.config.js b/tools/jest/jest.config.js index 00db94be1bb..9c77bc7c68f 100644 --- a/tools/jest/jest.config.js +++ b/tools/jest/jest.config.js @@ -37,6 +37,7 @@ module.exports = (rootDir) => ({ "^@tsed/objection$": fixPath(join(packageDir, "orm/objection/src")), "^@tsed/typeorm$": fixPath(join(packageDir, "orm/typeorm/src")), "^@tsed/mikro-orm": fixPath(join(packageDir, "orm/mikro-orm/src")), + "^@tsed/prisma": fixPath(join(packageDir, "orm/prisma/src")), "^@tsed/adapters$": fixPath(join(packageDir, "orm/adapters/src")), "^@tsed/mongoose$": fixPath(join(packageDir, "orm/mongoose/src")), "^@tsed/adapters-redis$": fixPath(join(packageDir, "orm/adapters-redis/src")), diff --git a/yarn.lock b/yarn.lock index b00a8356187..08af3f09fdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3205,6 +3205,144 @@ resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== +"@prisma/client@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.10.0.tgz#4782fe6f1b0e43c2a11a75ad4bb1098599d1dfb1" + integrity sha512-6P4sV7WFuODSfSoSEzCH1qfmWMrCUBk1LIIuTbQf6m1LI/IOpLN4lnqGDmgiBGprEzuWobnGLfe9YsXLn0inrg== + dependencies: + "@prisma/engines-version" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + +"@prisma/debug@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.10.0.tgz#7ba5be41b60f48b7822685437c588c8d178f30d7" + integrity sha512-rPf9EhhQ82bxuVz3lRkHSWyJTBluyDH1RSvzmiEZorpxxdqZSFxlk1gGxIEuu+T9dAhY1dtCq4E679SSycGHUQ== + dependencies: + "@types/debug" "4.1.7" + ms "2.1.3" + strip-ansi "6.0.1" + +"@prisma/debug@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.9.2.tgz#803e97da04c606e16467daf2b43a17be97204511" + integrity sha512-zi+GYWvhhXXxXffRAaHK0cJO3/nR44kp85+x7OH8YxV6Q7PvSfIhhUClgbbD8x9YaZI/lle0RvN2OC2DN4JV+A== + dependencies: + "@types/debug" "4.1.7" + ms "2.1.3" + strip-ansi "6.0.1" + +"@prisma/engine-core@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@prisma/engine-core/-/engine-core-3.10.0.tgz#89ce39d23fb2a318421d728b8c21f3d390d24206" + integrity sha512-w4enlE6cubPNVunD6HV3dAJ6V0ylxCGFp+d6bO9ecyv/Gc+5IGozK8mUBiwyTn4BemAmSLoqlLFA5sK/D5Tl6g== + dependencies: + "@prisma/debug" "3.10.0" + "@prisma/engines" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + "@prisma/generator-helper" "3.10.0" + "@prisma/get-platform" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + chalk "4.1.2" + execa "5.1.1" + get-stream "6.0.1" + indent-string "4.0.0" + new-github-issue-url "0.2.1" + p-retry "4.6.1" + strip-ansi "6.0.1" + terminal-link "2.1.1" + undici "3.3.6" + +"@prisma/engines-version@3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86": + version "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz#82750856fa637dd89b8f095d2dcc6ac0631231c6" + integrity sha512-cVYs5gyQH/qyut24hUvDznCfPrWiNMKNfPb9WmEoiU6ihlkscIbCfkmuKTtspVLWRdl0LqjYEC7vfnPv17HWhw== + +"@prisma/engines@3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86": + version "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz#2964113729a78b8b21e186b5592affd1fde73c16" + integrity sha512-LjRssaWu9w2SrXitofnutRIyURI7l0veQYIALz7uY4shygM9nMcK3omXcObRm7TAcw3Z+9ytfK1B+ySOsOesxQ== + +"@prisma/fetch-engine@3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86": + version "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz#e5916ad745d1f97ddce8b9160ac8437aa8865c09" + integrity sha512-mMPJns4thnaDzD8IItuSbUQUaAXpHPCZRCUF5cOzyRcmbn9F8oqMY1Mffma4+5ESezSgCcqzC7TJy0a3G5dB0w== + dependencies: + "@prisma/debug" "3.9.2" + "@prisma/get-platform" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + chalk "4.1.2" + execa "5.1.1" + find-cache-dir "3.3.2" + hasha "5.2.2" + http-proxy-agent "5.0.0" + https-proxy-agent "5.0.0" + make-dir "3.1.0" + node-fetch "2.6.7" + p-filter "2.1.0" + p-map "4.0.0" + p-retry "4.6.1" + progress "2.0.3" + rimraf "3.0.2" + temp-dir "2.0.0" + tempy "1.0.1" + +"@prisma/generator-helper@3.10.0", "@prisma/generator-helper@^3.2.1": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-3.10.0.tgz#312e0adbd8f5ea2d22726d4c53cc4b59941917e4" + integrity sha512-toG70HvYEMmpuSeiMI5XMGGRED2t4JqjgEcfpi6JklNFrO9H8xsPaCY6y6elQqlkk3zN8ABosy0+J6qiQUj57g== + dependencies: + "@prisma/debug" "3.10.0" + "@types/cross-spawn" "6.0.2" + chalk "4.1.2" + cross-spawn "7.0.3" + +"@prisma/get-platform@3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86": + version "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz#2a89e762061aaa92189321442f46cde902c949c8" + integrity sha512-CWyiI8RNzG5u0jlShUCcxTffSn1qbXmZtCbcIq41VTd2SDzx5KZj+yARCnIDazIrY1k2GltaqjzYTLfjZ6Ju0A== + dependencies: + "@prisma/debug" "3.9.2" + +"@prisma/sdk@^3.2.1": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@prisma/sdk/-/sdk-3.10.0.tgz#0f9a851c3138cc8378aa95a74c6f56b370537d4e" + integrity sha512-mNibKhgpWALYliePkuvDM0/J03pQk8MOfic26r+G43v2TJzjeyLwrYNo/WuDuC1pchqConZU0t1m76GyYJEAlQ== + dependencies: + "@prisma/debug" "3.10.0" + "@prisma/engine-core" "3.10.0" + "@prisma/engines" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + "@prisma/fetch-engine" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + "@prisma/generator-helper" "3.10.0" + "@prisma/get-platform" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + "@timsuchanek/copy" "1.4.5" + archiver "5.3.0" + arg "5.0.1" + chalk "4.1.2" + checkpoint-client "1.1.21" + cli-truncate "2.1.0" + dotenv "16.0.0" + escape-string-regexp "4.0.0" + execa "5.1.1" + find-up "5.0.0" + fs-jetpack "4.3.1" + global-dirs "3.0.0" + globby "11.1.0" + has-yarn "2.1.0" + is-ci "3.0.1" + make-dir "3.1.0" + node-fetch "2.6.7" + p-map "4.0.0" + read-pkg-up "7.0.1" + replace-string "3.1.0" + resolve "1.22.0" + rimraf "3.0.2" + shell-quote "1.7.3" + string-width "4.2.3" + strip-ansi "6.0.1" + strip-indent "3.0.0" + tar "6.1.11" + temp-dir "2.0.0" + temp-write "4.0.0" + tempy "1.0.1" + terminal-link "2.1.1" + tmp "0.2.1" + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -3466,11 +3604,41 @@ resolved "https://registry.yarnpkg.com/@tediousjs/connection-string/-/connection-string-0.3.0.tgz#23f7af793a365cc3b6a149ec1320f1e28c4242ff" integrity sha512-d/keJiNKfpHo+GmSB8QcsAwBx8h+V1UbdozA5TD+eSLXprNY53JAYub47J9evsSKWDdNG5uVj0FiMozLKuzowQ== +"@timsuchanek/copy@1.4.5": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@timsuchanek/copy/-/copy-1.4.5.tgz#8e9658c056e24e1928a88bed45f9eac6a72b7c40" + integrity sha512-N4+2/DvfwzQqHYL/scq07fv8yXbZc6RyUxKJoE8Clm14JpLOf9yNI4VB4D6RsV3h9zgzZ4loJUydHKM7pp3blw== + dependencies: + "@timsuchanek/sleep-promise" "^8.0.1" + commander "^2.19.0" + mkdirp "^1.0.4" + prettysize "^2.0.0" + +"@timsuchanek/sleep-promise@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@timsuchanek/sleep-promise/-/sleep-promise-8.0.1.tgz#81c0754b345138a519b51c2059771eb5f9b97818" + integrity sha512-cxHYbrXfnCWsklydIHSw5GCMHUPqpJ/enxWSyVHNOgNe61sit/+aOXTTI+VOdWkvVaJsI2vsB9N4+YDNITawOQ== + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@ts-morph/common@~0.11.1": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.11.1.tgz#281af2a0642b19354d8aa07a0d50dfdb4aa8164e" + integrity sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g== + dependencies: + fast-glob "^3.2.7" + minimatch "^3.0.4" + mkdirp "^1.0.4" + path-browserify "^1.0.1" + "@tsconfig/node10@^1.0.7": version "1.0.8" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" @@ -3709,6 +3877,13 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.12.tgz#6160ae454cd89dae05adc3bb97997f488b608201" integrity sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ== +"@types/change-case@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/change-case/-/change-case-2.3.1.tgz#dbaf4efb63ad8586ab8819179a790904ccb6a837" + integrity sha1-269O+2OthYariBkXmnkJBMy2qDc= + dependencies: + change-case "*" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -3778,6 +3953,20 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== +"@types/cross-spawn@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.2.tgz#168309de311cd30a2b8ae720de6475c2fbf33ac7" + integrity sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw== + dependencies: + "@types/node" "*" + +"@types/debug@4.1.7": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + "@types/ejs@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.0.tgz#ab8109208106b5e764e5a6c92b2ba1c625b73020" @@ -4138,6 +4327,11 @@ "@types/bson" "*" "@types/node" "*" +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/multer@^1.4.3": version "1.4.4" resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.4.tgz#bb5d9abc410da82726ceca74008bb81813349a88" @@ -4246,6 +4440,11 @@ dependencies: "@types/express" "*" +"@types/pluralize@0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/pluralize/-/pluralize-0.0.29.tgz#6ffa33ed1fc8813c469b859681d09707eb40d03c" + integrity sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA== + "@types/prettier@^2.1.5": version "2.3.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" @@ -5240,6 +5439,35 @@ aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" + integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.0" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + archy@^1.0.0, archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" @@ -5253,6 +5481,11 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +arg@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" + integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -6027,7 +6260,7 @@ bson@^4.5.4: dependencies: buffer "^5.6.0" -buffer-crc32@~0.2.3: +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= @@ -6429,6 +6662,14 @@ chalk@4.1.1, chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -6454,7 +6695,7 @@ chance@^1.1.7: resolved "https://registry.yarnpkg.com/chance/-/chance-1.1.7.tgz#e99dde5ac16681af787b5ba94c8277c090d6cfe8" integrity sha512-bua/2cZEfzS6qPm0vi3JEvGNbriDLcMj9lKxCQOjUcCJRcyjA7umP0zZm6bKWWlBN04vA0L99QGH/CZQawr0eg== -change-case@4.1.2: +change-case@*, change-case@4.1.2, change-case@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== @@ -6487,6 +6728,19 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= +checkpoint-client@1.1.21: + version "1.1.21" + resolved "https://registry.yarnpkg.com/checkpoint-client/-/checkpoint-client-1.1.21.tgz#47751b82748088b42d8baa2108d6219c6bc9ff59" + integrity sha512-bcrcnJncn6uGhj06IIsWvUBPyJWK1ZezDbLCJ//IQEYXkUobhGvOOBlHe9K5x0ZMkAZGinPB4T+lTUmFz/acWQ== + dependencies: + ci-info "3.3.0" + env-paths "2.2.1" + fast-write-atomic "0.2.1" + make-dir "3.1.0" + ms "2.1.3" + node-fetch "2.6.7" + uuid "8.3.2" + cheerio@0.20.0: version "0.20.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.20.0.tgz#5c710f2bab95653272842ba01c6ea61b3545ec35" @@ -6561,6 +6815,11 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +ci-info@3.3.0, ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + ci-info@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" @@ -6576,11 +6835,6 @@ ci-info@^3.1.1: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== -ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== - cidr-regex@^2.0.10: version "2.0.10" resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" @@ -6683,6 +6937,14 @@ cli-table@^0.3.1: dependencies: colors "1.0.3" +cli-truncate@2.1.0, cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -6691,14 +6953,6 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - cli-truncate@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" @@ -6823,6 +7077,11 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +code-block-writer@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-10.1.1.tgz#ad5684ed4bfb2b0783c8b131281ae84ee640a42f" + integrity sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw== + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -6984,6 +7243,16 @@ component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compress-commons@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + compressible@^2.0.0, compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -7470,6 +7739,22 @@ coveralls@3.1.0: minimist "^1.2.5" request "^2.88.2" +crc-32@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.1.tgz#436d2bcaad27bcb6bd073a2587139d3024a16460" + integrity sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.3.1" + +crc32-stream@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" + integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + crc@^3.4.4: version "3.8.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" @@ -7504,6 +7789,15 @@ cross-env@7.0.2: dependencies: cross-spawn "^7.0.1" +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -7524,15 +7818,6 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - crossvent@1.5.5: version "1.5.5" resolved "https://registry.yarnpkg.com/crossvent/-/crossvent-1.5.5.tgz#ad20878e4921e9be73d9d6976f8b2ecd0f71a0b1" @@ -8074,6 +8359,20 @@ degenerator@^1.0.4: escodegen "1.x.x" esprima "3.x.x" +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -8337,6 +8636,11 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" +dotenv@16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" + integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== + dotenv@8.2.0, dotenv@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" @@ -8560,6 +8864,11 @@ env-ci@^5.0.0: execa "^4.0.0" java-properties "^1.0.0" +env-paths@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + env-paths@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" @@ -9105,6 +9414,21 @@ execa@4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@5.1.1, execa@^5.0.0, execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -9146,20 +9470,10 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== exit@^0.1.2: version "0.1.2" @@ -9385,7 +9699,7 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" -fast-glob@^3.2.9: +fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -9438,6 +9752,11 @@ fast-safe-stringify@2.0.7, fast-safe-stringify@^2.0.7: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fast-write-atomic@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fast-write-atomic/-/fast-write-atomic-0.2.1.tgz#7ee8ef0ce3c1f531043c09ae8e5143361ab17ede" + integrity sha512-WvJe06IfNYlr+6cO3uQkdKdy3Cb1LlCJSF8zRs2eT8yuhdbSlR9nIt+TgQ92RUxiRrQm+/S7RARnMfCs5iuAjw== + fastify-cors@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/fastify-cors/-/fastify-cors-5.2.0.tgz#a92af64d9b7df1cd736c90ecd894a7b23c0cd75a" @@ -9662,19 +9981,19 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== +find-cache-dir@3.3.2, find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" pkg-dir "^4.1.0" -find-cache-dir@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== +find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== dependencies: commondir "^1.0.1" make-dir "^3.0.2" @@ -10113,6 +10432,14 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-jetpack@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-4.3.1.tgz#cdfd4b64e6bfdec7c7dc55c76b39efaa7853bb20" + integrity sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ== + dependencies: + minimatch "^3.0.2" + rimraf "^2.6.3" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -10318,6 +10645,11 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stream@6.0.1, get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -10337,11 +10669,6 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-uri@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" @@ -10504,6 +10831,13 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + global-dirs@^0.1.0, global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -10545,6 +10879,18 @@ globby@*, globby@11.0.3, globby@^11.0.0, globby@^11.0.2: merge2 "^1.3.0" slash "^3.0.0" +globby@11.1.0, globby@^11.0.1, globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globby@8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" @@ -10558,18 +10904,6 @@ globby@8.0.2: pify "^3.0.0" slash "^1.0.0" -globby@^11.0.4: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - globby@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" @@ -10827,7 +11161,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^2.1.0: +has-yarn@2.1.0, has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== @@ -10839,6 +11173,14 @@ has@^1.0.0, has@^1.0.3: dependencies: function-bind "^1.1.1" +hasha@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + hasha@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.0.tgz#33094d1f69c40a4a6ac7be53d5fe3ff95a269e0c" @@ -11005,6 +11347,15 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-proxy-agent@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -11039,6 +11390,14 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" +https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https-proxy-agent@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -11055,14 +11414,6 @@ https-proxy-agent@^3.0.0: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - human-interval@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/human-interval/-/human-interval-2.0.1.tgz#655baf606c7067bb26042dcae14ec777b099af15" @@ -11267,6 +11618,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@4.0.0, indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -11279,11 +11635,6 @@ indent-string@^3.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -11327,6 +11678,11 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -11558,6 +11914,13 @@ is-callable@^1.2.3: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-ci@3.0.1, is-ci@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -11579,13 +11942,6 @@ is-ci@^3.0.0: dependencies: ci-info "^3.1.1" -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - is-cidr@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" @@ -11617,7 +11973,7 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-core-module@^2.8.0: +is-core-module@^2.8.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -11831,6 +12187,11 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" @@ -11838,6 +12199,11 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -13128,6 +13494,13 @@ lazy-property@~1.0.0: resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -13652,6 +14025,11 @@ lodash.defaults@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -13788,7 +14166,7 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash.union@~4.6.0: +lodash.union@^4.6.0, lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= @@ -13974,6 +14352,13 @@ mailgun-js@^0.22.0: proxy-agent "^3.0.3" tsscmp "^1.0.6" +make-dir@3.1.0, make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -13989,13 +14374,6 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -14418,6 +14796,13 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -14788,6 +15173,11 @@ ms@2.1.2, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + msal@^1.0.2: version "1.4.12" resolved "https://registry.yarnpkg.com/msal/-/msal-1.4.12.tgz#a7da09623c99c2dd652823768401935fe996e32e" @@ -14979,6 +15369,11 @@ new-find-package-json@^1.1.0: debug "^4.3.2" tslib "^2.3.0" +new-github-issue-url@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/new-github-issue-url/-/new-github-issue-url-0.2.1.tgz#e17be1f665a92de465926603e44b9f8685630c1d" + integrity sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA== + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -15041,6 +15436,13 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" +node-fetch@2.6.7, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.2.tgz#986996818b73785e47b1965cc34eb093a1d464d0" @@ -15051,13 +15453,6 @@ node-fetch@^2.6.1, node-fetch@~2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - node-gyp@3.x: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" @@ -15945,7 +16340,7 @@ p-each-series@^2.1.0: resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== -p-filter@^2.0.0: +p-filter@2.1.0, p-filter@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== @@ -16016,6 +16411,13 @@ p-map-series@^2.1.0: resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== +p-map@4.0.0, p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-map@^2.0.0, p-map@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -16028,13 +16430,6 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-pipe@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" @@ -16053,6 +16448,14 @@ p-reduce@^2.0.0, p-reduce@^2.1.0: resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== +p-retry@4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" + integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== + dependencies: + "@types/retry" "^0.12.0" + retry "^0.13.1" + p-retry@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.2.0.tgz#ea9066c6b44f23cab4cd42f6147cdbbc6604da5d" @@ -16377,6 +16780,11 @@ passport@0.4.1: passport-strategy "1.x.x" pause "0.0.1" +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" @@ -16646,6 +17054,11 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pluralize@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + popper.js@^1.0.2: version "1.16.1" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" @@ -17087,6 +17500,23 @@ pretty-format@^27.0.0, pretty-format@^27.2.0, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" +prettysize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prettysize/-/prettysize-2.0.0.tgz#902c02480d865d9cc0813011c9feb4fa02ce6996" + integrity sha512-VVtxR7sOh0VsG8o06Ttq5TrI1aiZKmC+ClSn4eBPaNf4SHr5lzbYW+kYGX3HocBL/MfpVrRfFZ9V3vCbLaiplg== + +printj@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.1.tgz#9af6b1d55647a1587ac44f4c1654a4b95b8e12cb" + integrity sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg== + +prisma@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.10.0.tgz#872d87afbeb1cbcaa77c3d6a63c125e0d704b04d" + integrity sha512-dAld12vtwdz9Rz01nOjmnXe+vHana5PSog8t0XGgLemKsUVsaupYpr74AHaS3s78SaTS5s2HOghnJF+jn91ZrA== + dependencies: + "@prisma/engines" "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -17104,7 +17534,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0, progress@^2.0.3: +progress@2.0.3, progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -17504,6 +17934,15 @@ read-pkg-up@7.0.0: read-pkg "^5.2.0" type-fest "^0.8.1" +read-pkg-up@7.0.1, read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -17528,15 +17967,6 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" -read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -17590,7 +18020,7 @@ read@1, read@1.0.x, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@2, readable-stream@2.3.7, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@2, readable-stream@2.3.7, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -17632,6 +18062,13 @@ readable-stream@1.1.x, readable-stream@~1.1.10: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" + readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -17859,6 +18296,11 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +replace-string@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/replace-string/-/replace-string-3.1.0.tgz#77a087d88580fbac59851237891aa4b0e283db72" + integrity sha512-yPpxc4ZR2makceA9hy/jHNqc7QVkd4Je/N0WRHm6bs3PtivPuPynxE5ejU/mp5EhnCv8+uZL7vhz8rkluSlx+Q== + request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -17999,6 +18441,15 @@ resolve@1.17.0, resolve@^1.10.0, resolve@^1.11.1, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +resolve@1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.1.6: version "1.21.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" @@ -18081,6 +18532,11 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -18120,7 +18576,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -18550,6 +19006,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + shelljs@^0.8.3: version "0.8.5" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" @@ -19217,6 +19678,15 @@ string-similarity@^4.0.1: resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== +string-width@4.2.3, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -19252,15 +19722,6 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.0.tgz#5ab00980cfb29f43e736b113a120a73a0fb569d3" @@ -19342,6 +19803,13 @@ stringify-package@^1.0.0, stringify-package@^1.0.1: resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== +strip-ansi@6.0.1, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -19370,13 +19838,6 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" @@ -19411,6 +19872,13 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-indent@3.0.0, strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -19418,13 +19886,6 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -19644,6 +20105,29 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + tar@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -19724,17 +20208,17 @@ tedious@^6.7.0: readable-stream "^3.4.0" sprintf-js "^1.1.2" +temp-dir@2.0.0, temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp-write@^4.0.0: +temp-write@4.0.0, temp-write@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-4.0.0.tgz#cd2e0825fc826ae72d201dc26eef3bf7e6fc9320" integrity sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw== @@ -19745,6 +20229,17 @@ temp-write@^4.0.0: temp-dir "^1.0.0" uuid "^3.3.2" +tempy@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" + integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== + dependencies: + del "^6.0.0" + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + tempy@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.5.0.tgz#2785c89df39fcc4d1714fc554813225e1581d70b" @@ -19762,7 +20257,7 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terminal-link@^2.0.0: +terminal-link@2.1.1, terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== @@ -19906,6 +20401,13 @@ tiny-relative-date@^1.3.0: resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== +tmp@0.2.1, tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -19913,13 +20415,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -20087,6 +20582,14 @@ ts-mockito@^2.6.1: dependencies: lodash "^4.17.5" +ts-morph@^12.0.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-12.2.0.tgz#3332319cecd44aff0b7b410f1fe39637499b1a1b" + integrity sha512-WHXLtFDcIRwoqaiu0elAoZ/AmI+SwwDafnPKjgJmdwJ2gRVO0jMKBt88rV2liT/c6MTsXyuWbGFiHe9MRddWJw== + dependencies: + "@ts-morph/common" "~0.11.1" + code-block-writer "^10.1.1" + ts-node@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5" @@ -20242,6 +20745,11 @@ type-fest@^0.13.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -20380,6 +20888,11 @@ unbox-primitive@^1.0.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.11.0.tgz#dd7c23a195db34267186044649870ff1bab5929e" integrity sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw== +undici@3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/undici/-/undici-3.3.6.tgz#06d3b97b7eeff46bce6f8a71079c09f64dd59dc1" + integrity sha512-/j3YTZ5AobMB4ZrTY72mzM54uFUX32v0R/JRW9G2vOyF1uSKYAx+WT8dMsAcRS13TOFISv094TxIyWYk+WEPsA== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -21414,3 +21927,12 @@ zen-observable@^0.8.0: version "0.8.15" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== + +zip-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.1.0" + readable-stream "^3.6.0"