๐Ÿ“ฆ amake / prisma-validator-repro

Minimal reproduction of incompatibility between create-validator-ts (ts-json-schema-generator) and Prisma ORM

โ˜… 0 stars โ‘‚ 0 forks ๐Ÿ‘ 0 watching
๐Ÿ“ฅ Clone https://github.com/amake/prisma-validator-repro.git
HTTPS git clone https://github.com/amake/prisma-validator-repro.git
SSH git clone git@github.com:amake/prisma-validator-repro.git
CLI gh repo clone amake/prisma-validator-repro
Aaron Madlon-Kay Aaron Madlon-Kay Note conclusion of issue bfc4d49 1 months ago ๐Ÿ“ History
๐Ÿ“‚ main View all commits โ†’
๐Ÿ“ prisma
๐Ÿ“„ .env
๐Ÿ“„ .gitignore
๐Ÿ“„ api-types.ts
๐Ÿ“„ package-lock.json
๐Ÿ“„ package.json
๐Ÿ“„ prisma.config.ts
๐Ÿ“„ README.md
๐Ÿ“„ tsconfig.json
๐Ÿ“„ README.md

prisma-validator-repro

This repo is a minimal reproduction of an error I encountered when trying to use create-validator-ts to generate validation logic for a TypeScript type that pulls in a model type generated with Prisma ORM.

Update: This issue is fixed as of release v2.5.0-next.16 of ts-json-schema-generator. You can work around the issue in create-validator-ts by adding the following to your package.json:

"overrides": {
    "create-validator-ts": {
      "ts-json-schema-generator": ">=2.5.0-next.16 <3.0.0"
    }
  },

Steps to reproduce

  • Clone this repository
  • Run npm run setup
  • Run npm run gen:validator
  • Note the error:
% npm run gen:validator

    > prisma-validator-repro@1.0.0 gen:validator
    > create-validator-ts api-types.ts

    Fail to parse: /Users/user/prisma-validator-repro/api-types.ts LogicError: Invalid index "user" in type "indexed-type-1777104669-67853-67948-1777104669-67840-67949-1777104669-67838-68228-1777104669-67542-68229-1777104669-0-129753<structure-1777104669-21405-21407-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21408-21411-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21412-21415-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21416-21419-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753>"
        at /Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:65:27
        at Array.map (<anonymous>)
        at IndexedAccessTypeNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:52:42)
        at ChainNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:31:49)
        at TypeReferenceNodeParser.createSubContext (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:66:62)
        at TypeReferenceNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:36:70)
        at ChainNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:31:49)
        at AnnotatedNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/AnnotatedNodeParser.js:29:47)
        at /Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeLiteralNodeParser.js:39:133
    ...

Full error output

% npm run gen:validator

    > prisma-validator-repro@1.0.0 gen:validator
    > create-validator-ts api-types.ts

    Fail to parse: /Users/user/prisma-validator-repro/api-types.ts LogicError: Invalid index "user" in type "indexed-type-1777104669-67853-67948-1777104669-67840-67949-1777104669-67838-68228-1777104669-67542-68229-1777104669-0-129753<structure-1777104669-21405-21407-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21408-21411-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21412-21415-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21416-21419-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753>"
        at /Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:65:27
        at Array.map (<anonymous>)
        at IndexedAccessTypeNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:52:42)
        at ChainNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:31:49)
        at TypeReferenceNodeParser.createSubContext (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:66:62)
        at TypeReferenceNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:36:70)
        at ChainNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:31:49)
        at AnnotatedNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/AnnotatedNodeParser.js:29:47)
        at /Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeLiteralNodeParser.js:39:133
        at Array.map (<anonymous>) {
      diagnostic: {
        category: 1,
        file: SourceFileObject {
          pos: 0,
          end: 39476,
          kind: 308,
          id: 0,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: undefined,
          original: undefined,
          emitNode: undefined,
          statements: [Array],
          endOfFileToken: [TokenObject],
          text: '\n' +
            '/* !!! This is code generated by Prisma. Do not edit directly. !!! */\n' +
            '/* eslint-disable */\n' +
            '// biome-ignore-all lint: generated file\n' +
            '// @ts-nocheck \n' +
            '/*\n' +
            ' * This file exports the `User` model and its related types.\n' +
            ' *\n' +
            ' * ๐ŸŸข You can import this file directly.\n' +
            ' */\n' +
            'import type * as runtime from "@prisma/client/runtime/library"\n' +
            'import type * as $Enums from "../enums.js"\n' +
            'import type * as Prisma from "../internal/prismaNamespace.js"\n' +
            '\n' +
            '/**\n' +
            ' * Model User\n' +
            ' * \n' +
            ' */\n' +
            'export type UserModel = runtime.Types.Result.DefaultSelection<Prisma.$UserPayload>\n' +
            '\n' +
            'export type AggregateUser = {\n' +
            '  _count: UserCountAggregateOutputType | null\n' +
            '  _min: UserMinAggregateOutputType | null\n' +
            '  _max: UserMaxAggregateOutputType | null\n' +
            '}\n' +
            '\n' +
            'export type UserMinAggregateOutputType = {\n' +
            '  id: string | null\n' +
            '  email: string | null\n' +
            '  name: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserMaxAggregateOutputType = {\n' +
            '  id: string | null\n' +
            '  email: string | null\n' +
            '  name: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCountAggregateOutputType = {\n' +
            '  id: number\n' +
            '  email: number\n' +
            '  name: number\n' +
            '  _all: number\n' +
            '}\n' +
            '\n' +
            '\n' +
            'export type UserMinAggregateInputType = {\n' +
            '  id?: true\n' +
            '  email?: true\n' +
            '  name?: true\n' +
            '}\n' +
            '\n' +
            'export type UserMaxAggregateInputType = {\n' +
            '  id?: true\n' +
            '  email?: true\n' +
            '  name?: true\n' +
            '}\n' +
            '\n' +
            'export type UserCountAggregateInputType = {\n' +
            '  id?: true\n' +
            '  email?: true\n' +
            '  name?: true\n' +
            '  _all?: true\n' +
            '}\n' +
            '\n' +
            'export type UserAggregateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {\n' +
            '  /**\n' +
            '   * Filter which User to aggregate.\n' +
            '   */\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n' +
            '   * \n' +
            '   * Determine the order of Users to fetch.\n' +
            '   */\n' +
            '  orderBy?: Prisma.UserOrderByWithRelationInput | Prisma.UserOrderByWithRelationInput[]\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n' +
            '   * \n' +
            '   * Sets the start position\n' +
            '   */\n' +
            '  cursor?: Prisma.UserWhereUniqueInput\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n' +
            '   * \n' +
            '   * Take `ยฑn` Users from the position of the cursor.\n' +
            '   */\n' +
            '  take?: number\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n' +
            '   * \n' +
            '   * Skip the first `n` Users.\n' +
            '   */\n' +
            '  skip?: number\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n' +
            '   * \n' +
            '   * Count returned Users\n' +
            '  **/\n' +
            '  _count?: true | UserCountAggregateInputType\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n' +
            '   * \n' +
            '   * Select which fields to find the minimum value\n' +
            '  **/\n' +
            '  _min?: UserMinAggregateInputType\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n' +
            '   * \n' +
            '   * Select which fields to find the maximum value\n' +
            '  **/\n' +
            '  _max?: UserMaxAggregateInputType\n' +
            '}\n' +
            '\n' +
            'export type GetUserAggregateType<T extends UserAggregateArgs> = {\n' +
            "      [P in keyof T & keyof AggregateUser]: P extends '_count' | 'count'\n" +
            '    ? T[P] extends true\n' +
            '      ? number\n' +
            '      : Prisma.GetScalarType<T[P], AggregateUser[P]>\n' +
            '    : Prisma.GetScalarType<T[P], AggregateUser[P]>\n' +
            '}\n' +
            '\n' +
            '\n' +
            '\n' +
            '\n' +
            'export type UserGroupByArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '  orderBy?: Prisma.UserOrderByWithAggregationInput | Prisma.UserOrderByWithAggregationInput[]\n' +
            '  by: Prisma.UserScalarFieldEnum[] | Prisma.UserScalarFieldEnum\n' +
            '  having?: Prisma.UserScalarWhereWithAggregatesInput\n' +
            '  take?: number\n' +
            '  skip?: number\n' +
            '  _count?: UserCountAggregateInputType | true\n' +
            '  _min?: UserMinAggregateInputType\n' +
            '  _max?: UserMaxAggregateInputType\n' +
            '}\n' +
            '\n' +
            'export type UserGroupByOutputType = {\n' +
            '  id: string\n' +
            '  email: string\n' +
            '  name: string | null\n' +
            '  _count: UserCountAggregateOutputType | null\n' +
            '  _min: UserMinAggregateOutputType | null\n' +
            '  _max: UserMaxAggregateOutputType | null\n' +
            '}\n' +
            '\n' +
            'type GetUserGroupByPayload<T extends UserGroupByArgs> = Prisma.PrismaPromise<\n' +
            '  Array<\n' +
            "    Prisma.PickEnumerable<UserGroupByOutputType, T['by']> &\n" +
            '      {\n' +
            "        [P in ((keyof T) & (keyof UserGroupByOutputType))]: P extends '_count'\n" +
            '          ? T[P] extends boolean\n' +
            '            ? number\n' +
            '            : Prisma.GetScalarType<T[P], UserGroupByOutputType[P]>\n' +
            '          : Prisma.GetScalarType<T[P], UserGroupByOutputType[P]>\n' +
            '      }\n' +
            '    >\n' +
            '  >\n' +
            '\n' +
            '\n' +
            '\n' +
            'export type UserWhereInput = {\n' +
            '  AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  OR?: Prisma.UserWhereInput[]\n' +
            '  NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  id?: Prisma.StringFilter<"User"> | string\n' +
            '  email?: Prisma.StringFilter<"User"> | string\n' +
            '  name?: Prisma.StringNullableFilter<"User"> | string | null\n' +
            '  posts?: Prisma.PostListRelationFilter\n' +
            '}\n' +
            '\n' +
            'export type UserOrderByWithRelationInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '  posts?: Prisma.PostOrderByRelationAggregateInput\n' +
            '}\n' +
            '\n' +
            'export type UserWhereUniqueInput = Prisma.AtLeast<{\n' +
            '  id?: string\n' +
            '  email?: string\n' +
            '  AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  OR?: Prisma.UserWhereInput[]\n' +
            '  NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  name?: Prisma.StringNullableFilter<"User"> | string | null\n' +
            '  posts?: Prisma.PostListRelationFilter\n' +
            '}, "id" | "email">\n' +
            '\n' +
            'export type UserOrderByWithAggregationInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '  _count?: Prisma.UserCountOrderByAggregateInput\n' +
            '  _max?: Prisma.UserMaxOrderByAggregateInput\n' +
            '  _min?: Prisma.UserMinOrderByAggregateInput\n' +
            '}\n' +
            '\n' +
            'export type UserScalarWhereWithAggregatesInput = {\n' +
            '  AND?: Prisma.UserScalarWhereWithAggregatesInput | Prisma.UserScalarWhereWithAggregatesInput[]\n' +
            '  OR?: Prisma.UserScalarWhereWithAggregatesInput[]\n' +
            '  NOT?: Prisma.UserScalarWhereWithAggregatesInput | Prisma.UserScalarWhereWithAggregatesInput[]\n' +
            '  id?: Prisma.StringWithAggregatesFilter<"User"> | string\n' +
            '  email?: Prisma.StringWithAggregatesFilter<"User"> | string\n' +
            '  name?: Prisma.StringNullableWithAggregatesFilter<"User"> | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCreateInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '  posts?: Prisma.PostCreateNestedManyWithoutAuthorInput\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedCreateInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '  posts?: Prisma.PostUncheckedCreateNestedManyWithoutAuthorInput\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '  posts?: Prisma.PostUpdateManyWithoutAuthorNestedInput\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedUpdateInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '  posts?: Prisma.PostUncheckedUpdateManyWithoutAuthorNestedInput\n' +
            '}\n' +
            '\n' +
            'export type UserCreateManyInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateManyMutationInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedUpdateManyInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCountOrderByAggregateInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '}\n' +
            '\n' +
            'export type UserMaxOrderByAggregateInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '}\n' +
            '\n' +
            'export type UserMinOrderByAggregateInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '}\n' +
            '\n' +
            'export type UserScalarRelationFilter = {\n' +
            '  is?: Prisma.UserWhereInput\n' +
            '  isNot?: Prisma.UserWhereInput\n' +
            '}\n' +
            '\n' +
            'export type StringFieldUpdateOperationsInput = {\n' +
            '  set?: string\n' +
            '}\n' +
            '\n' +
            'export type NullableStringFieldUpdateOperationsInput = {\n' +
            '  set?: string | null\n' +
            '  unset?: boolean\n' +
            '}\n' +
            '\n' +
            'export type UserCreateNestedOneWithoutPostsInput = {\n' +
            '  create?: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '  connectOrCreate?: Prisma.UserCreateOrConnectWithoutPostsInput\n' +
            '  connect?: Prisma.UserWhereUniqueInput\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateOneRequiredWithoutPostsNestedInput = {\n' +
            '  create?: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '  connectOrCreate?: Prisma.UserCreateOrConnectWithoutPostsInput\n' +
            '  upsert?: Prisma.UserUpsertWithoutPostsInput\n' +
            '  connect?: Prisma.UserWhereUniqueInput\n' +
            '  update?: Prisma.XOR<Prisma.XOR<Prisma.UserUpdateToOneWithWhereWithoutPostsInput, Prisma.UserUpdateWithoutPostsInput>, Prisma.UserUncheckedUpdateWithoutPostsInput>\n' +
            '}\n' +
            '\n' +
            'export type UserCreateWithoutPostsInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedCreateWithoutPostsInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCreateOrConnectWithoutPostsInput = {\n' +
            '  where: Prisma.UserWhereUniqueInput\n' +
            '  create: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '}\n' +
            '\n' +
            'export type UserUpsertWithoutPostsInput = {\n' +
            '  update: Prisma.XOR<Prisma.UserUpdateWithoutPostsInput, Prisma.UserUncheckedUpdateWithoutPostsInput>\n' +
            '  create: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateToOneWithWhereWithoutPostsInput = {\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '  data: Prisma.XOR<Prisma.UserUpdateWithoutPostsInput, Prisma.UserUncheckedUpdateWithoutPostsInput>\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateWithoutPostsInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedUpdateWithoutPostsInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            '\n' +
            '/**\n' +
            ' * Count Type UserCountOutputType\n' +
            ' */\n' +
            '\n' +
            'export type UserCountOutputType = {\n' +
            ' '... 29476 more characters,
          fileName: '/Users/user/prisma-validator-repro/generated/prisma/models/User.ts',
          path: '/users/user/prisma-validator-repro/generated/prisma/models/user.ts',
          resolvedPath: '/users/user/prisma-validator-repro/generated/prisma/models/user.ts',
          originalFileName: '/Users/user/prisma-validator-repro/generated/prisma/models/User.ts',
          languageVersion: 10,
          languageVariant: 0,
          scriptKind: 3,
          isDeclarationFile: false,
          hasNoDefaultLib: false,
          locals: [Map],
          nextContainer: [NodeObject],
          endFlowNode: [Object],
          nodeCount: 4604,
          identifierCount: 1730,
          symbolCount: 595,
          parseDiagnostics: [],
          bindDiagnostics: [],
          bindSuggestionDiagnostics: undefined,
          lineMap: undefined,
          externalModuleIndicator: [NodeObject],
          setExternalModuleIndicator: [Function: callback],
          pragmas: [Map],
          checkJsDirective: [Object],
          referencedFiles: [],
          typeReferenceDirectives: [],
          libReferenceDirectives: [],
          amdDependencies: [],
          commentDirectives: undefined,
          identifiers: [Map],
          packageJsonLocations: undefined,
          packageJsonScope: undefined,
          imports: [Array],
          moduleAugmentations: [],
          ambientModuleNames: [],
          classifiableNames: [Set],
          impliedNodeFormat: undefined,
          jsDocParsingMode: 0,
          symbol: [SymbolObject]
        },
        length: 25,
        start: 11969,
        code: 'J - 104',
        messageText: 'Invalid index "user" in type "indexed-type-1777104669-67853-67948-1777104669-67840-67949-1777104669-67838-68228-1777104669-67542-68229-1777104669-0-129753<structure-1777104669-21405-21407-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21408-21411-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21412-21415-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21416-21419-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753>"',
        node: undefined
      },
      node: <ref *1> NodeObject {
        pos: 11968,
        end: 11994,
        kind: 200,
        id: 1065,
        flags: 0,
        modifierFlagsCache: 0,
        transformFlags: 1,
        parent: NodeObject {
          pos: 11862,
          end: 11995,
          kind: 184,
          id: 1034,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: [NodeObject],
          original: undefined,
          emitNode: undefined,
          typeName: [NodeObject],
          typeArguments: [Array]
        },
        original: undefined,
        emitNode: undefined,
        objectType: NodeObject {
          pos: 11968,
          end: 11986,
          kind: 200,
          id: 1066,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: [Circular *1],
          original: undefined,
          emitNode: undefined,
          objectType: [NodeObject],
          indexType: [NodeObject]
        },
        indexType: NodeObject {
          pos: 11987,
          end: 11993,
          kind: 202,
          id: 1070,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: [Circular *1],
          original: undefined,
          emitNode: undefined,
          literal: [NodeObject]
        }
      }
    }
    LogicError: Invalid index "user" in type "indexed-type-1777104669-67853-67948-1777104669-67840-67949-1777104669-67838-68228-1777104669-67542-68229-1777104669-0-129753<structure-1777104669-21405-21407-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21408-21411-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21412-21415-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21416-21419-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753>"
        at /Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:65:27
        at Array.map (<anonymous>)
        at IndexedAccessTypeNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:52:42)
        at ChainNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:31:49)
        at TypeReferenceNodeParser.createSubContext (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:66:62)
        at TypeReferenceNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:36:70)
        at ChainNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:31:49)
        at AnnotatedNodeParser.createType (/Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/AnnotatedNodeParser.js:29:47)
        at /Users/user/prisma-validator-repro/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeLiteralNodeParser.js:39:133
        at Array.map (<anonymous>) {
      diagnostic: {
        category: 1,
        file: SourceFileObject {
          pos: 0,
          end: 39476,
          kind: 308,
          id: 0,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: undefined,
          original: undefined,
          emitNode: undefined,
          statements: [Array],
          endOfFileToken: [TokenObject],
          text: '\n' +
            '/* !!! This is code generated by Prisma. Do not edit directly. !!! */\n' +
            '/* eslint-disable */\n' +
            '// biome-ignore-all lint: generated file\n' +
            '// @ts-nocheck \n' +
            '/*\n' +
            ' * This file exports the `User` model and its related types.\n' +
            ' *\n' +
            ' * ๐ŸŸข You can import this file directly.\n' +
            ' */\n' +
            'import type * as runtime from "@prisma/client/runtime/library"\n' +
            'import type * as $Enums from "../enums.js"\n' +
            'import type * as Prisma from "../internal/prismaNamespace.js"\n' +
            '\n' +
            '/**\n' +
            ' * Model User\n' +
            ' * \n' +
            ' */\n' +
            'export type UserModel = runtime.Types.Result.DefaultSelection<Prisma.$UserPayload>\n' +
            '\n' +
            'export type AggregateUser = {\n' +
            '  _count: UserCountAggregateOutputType | null\n' +
            '  _min: UserMinAggregateOutputType | null\n' +
            '  _max: UserMaxAggregateOutputType | null\n' +
            '}\n' +
            '\n' +
            'export type UserMinAggregateOutputType = {\n' +
            '  id: string | null\n' +
            '  email: string | null\n' +
            '  name: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserMaxAggregateOutputType = {\n' +
            '  id: string | null\n' +
            '  email: string | null\n' +
            '  name: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCountAggregateOutputType = {\n' +
            '  id: number\n' +
            '  email: number\n' +
            '  name: number\n' +
            '  _all: number\n' +
            '}\n' +
            '\n' +
            '\n' +
            'export type UserMinAggregateInputType = {\n' +
            '  id?: true\n' +
            '  email?: true\n' +
            '  name?: true\n' +
            '}\n' +
            '\n' +
            'export type UserMaxAggregateInputType = {\n' +
            '  id?: true\n' +
            '  email?: true\n' +
            '  name?: true\n' +
            '}\n' +
            '\n' +
            'export type UserCountAggregateInputType = {\n' +
            '  id?: true\n' +
            '  email?: true\n' +
            '  name?: true\n' +
            '  _all?: true\n' +
            '}\n' +
            '\n' +
            'export type UserAggregateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {\n' +
            '  /**\n' +
            '   * Filter which User to aggregate.\n' +
            '   */\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n' +
            '   * \n' +
            '   * Determine the order of Users to fetch.\n' +
            '   */\n' +
            '  orderBy?: Prisma.UserOrderByWithRelationInput | Prisma.UserOrderByWithRelationInput[]\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n' +
            '   * \n' +
            '   * Sets the start position\n' +
            '   */\n' +
            '  cursor?: Prisma.UserWhereUniqueInput\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n' +
            '   * \n' +
            '   * Take `ยฑn` Users from the position of the cursor.\n' +
            '   */\n' +
            '  take?: number\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n' +
            '   * \n' +
            '   * Skip the first `n` Users.\n' +
            '   */\n' +
            '  skip?: number\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n' +
            '   * \n' +
            '   * Count returned Users\n' +
            '  **/\n' +
            '  _count?: true | UserCountAggregateInputType\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n' +
            '   * \n' +
            '   * Select which fields to find the minimum value\n' +
            '  **/\n' +
            '  _min?: UserMinAggregateInputType\n' +
            '  /**\n' +
            '   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n' +
            '   * \n' +
            '   * Select which fields to find the maximum value\n' +
            '  **/\n' +
            '  _max?: UserMaxAggregateInputType\n' +
            '}\n' +
            '\n' +
            'export type GetUserAggregateType<T extends UserAggregateArgs> = {\n' +
            "      [P in keyof T & keyof AggregateUser]: P extends '_count' | 'count'\n" +
            '    ? T[P] extends true\n' +
            '      ? number\n' +
            '      : Prisma.GetScalarType<T[P], AggregateUser[P]>\n' +
            '    : Prisma.GetScalarType<T[P], AggregateUser[P]>\n' +
            '}\n' +
            '\n' +
            '\n' +
            '\n' +
            '\n' +
            'export type UserGroupByArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '  orderBy?: Prisma.UserOrderByWithAggregationInput | Prisma.UserOrderByWithAggregationInput[]\n' +
            '  by: Prisma.UserScalarFieldEnum[] | Prisma.UserScalarFieldEnum\n' +
            '  having?: Prisma.UserScalarWhereWithAggregatesInput\n' +
            '  take?: number\n' +
            '  skip?: number\n' +
            '  _count?: UserCountAggregateInputType | true\n' +
            '  _min?: UserMinAggregateInputType\n' +
            '  _max?: UserMaxAggregateInputType\n' +
            '}\n' +
            '\n' +
            'export type UserGroupByOutputType = {\n' +
            '  id: string\n' +
            '  email: string\n' +
            '  name: string | null\n' +
            '  _count: UserCountAggregateOutputType | null\n' +
            '  _min: UserMinAggregateOutputType | null\n' +
            '  _max: UserMaxAggregateOutputType | null\n' +
            '}\n' +
            '\n' +
            'type GetUserGroupByPayload<T extends UserGroupByArgs> = Prisma.PrismaPromise<\n' +
            '  Array<\n' +
            "    Prisma.PickEnumerable<UserGroupByOutputType, T['by']> &\n" +
            '      {\n' +
            "        [P in ((keyof T) & (keyof UserGroupByOutputType))]: P extends '_count'\n" +
            '          ? T[P] extends boolean\n' +
            '            ? number\n' +
            '            : Prisma.GetScalarType<T[P], UserGroupByOutputType[P]>\n' +
            '          : Prisma.GetScalarType<T[P], UserGroupByOutputType[P]>\n' +
            '      }\n' +
            '    >\n' +
            '  >\n' +
            '\n' +
            '\n' +
            '\n' +
            'export type UserWhereInput = {\n' +
            '  AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  OR?: Prisma.UserWhereInput[]\n' +
            '  NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  id?: Prisma.StringFilter<"User"> | string\n' +
            '  email?: Prisma.StringFilter<"User"> | string\n' +
            '  name?: Prisma.StringNullableFilter<"User"> | string | null\n' +
            '  posts?: Prisma.PostListRelationFilter\n' +
            '}\n' +
            '\n' +
            'export type UserOrderByWithRelationInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '  posts?: Prisma.PostOrderByRelationAggregateInput\n' +
            '}\n' +
            '\n' +
            'export type UserWhereUniqueInput = Prisma.AtLeast<{\n' +
            '  id?: string\n' +
            '  email?: string\n' +
            '  AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  OR?: Prisma.UserWhereInput[]\n' +
            '  NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]\n' +
            '  name?: Prisma.StringNullableFilter<"User"> | string | null\n' +
            '  posts?: Prisma.PostListRelationFilter\n' +
            '}, "id" | "email">\n' +
            '\n' +
            'export type UserOrderByWithAggregationInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '  _count?: Prisma.UserCountOrderByAggregateInput\n' +
            '  _max?: Prisma.UserMaxOrderByAggregateInput\n' +
            '  _min?: Prisma.UserMinOrderByAggregateInput\n' +
            '}\n' +
            '\n' +
            'export type UserScalarWhereWithAggregatesInput = {\n' +
            '  AND?: Prisma.UserScalarWhereWithAggregatesInput | Prisma.UserScalarWhereWithAggregatesInput[]\n' +
            '  OR?: Prisma.UserScalarWhereWithAggregatesInput[]\n' +
            '  NOT?: Prisma.UserScalarWhereWithAggregatesInput | Prisma.UserScalarWhereWithAggregatesInput[]\n' +
            '  id?: Prisma.StringWithAggregatesFilter<"User"> | string\n' +
            '  email?: Prisma.StringWithAggregatesFilter<"User"> | string\n' +
            '  name?: Prisma.StringNullableWithAggregatesFilter<"User"> | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCreateInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '  posts?: Prisma.PostCreateNestedManyWithoutAuthorInput\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedCreateInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '  posts?: Prisma.PostUncheckedCreateNestedManyWithoutAuthorInput\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '  posts?: Prisma.PostUpdateManyWithoutAuthorNestedInput\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedUpdateInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '  posts?: Prisma.PostUncheckedUpdateManyWithoutAuthorNestedInput\n' +
            '}\n' +
            '\n' +
            'export type UserCreateManyInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateManyMutationInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedUpdateManyInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCountOrderByAggregateInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '}\n' +
            '\n' +
            'export type UserMaxOrderByAggregateInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '}\n' +
            '\n' +
            'export type UserMinOrderByAggregateInput = {\n' +
            '  id?: Prisma.SortOrder\n' +
            '  email?: Prisma.SortOrder\n' +
            '  name?: Prisma.SortOrder\n' +
            '}\n' +
            '\n' +
            'export type UserScalarRelationFilter = {\n' +
            '  is?: Prisma.UserWhereInput\n' +
            '  isNot?: Prisma.UserWhereInput\n' +
            '}\n' +
            '\n' +
            'export type StringFieldUpdateOperationsInput = {\n' +
            '  set?: string\n' +
            '}\n' +
            '\n' +
            'export type NullableStringFieldUpdateOperationsInput = {\n' +
            '  set?: string | null\n' +
            '  unset?: boolean\n' +
            '}\n' +
            '\n' +
            'export type UserCreateNestedOneWithoutPostsInput = {\n' +
            '  create?: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '  connectOrCreate?: Prisma.UserCreateOrConnectWithoutPostsInput\n' +
            '  connect?: Prisma.UserWhereUniqueInput\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateOneRequiredWithoutPostsNestedInput = {\n' +
            '  create?: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '  connectOrCreate?: Prisma.UserCreateOrConnectWithoutPostsInput\n' +
            '  upsert?: Prisma.UserUpsertWithoutPostsInput\n' +
            '  connect?: Prisma.UserWhereUniqueInput\n' +
            '  update?: Prisma.XOR<Prisma.XOR<Prisma.UserUpdateToOneWithWhereWithoutPostsInput, Prisma.UserUpdateWithoutPostsInput>, Prisma.UserUncheckedUpdateWithoutPostsInput>\n' +
            '}\n' +
            '\n' +
            'export type UserCreateWithoutPostsInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedCreateWithoutPostsInput = {\n' +
            '  id?: string\n' +
            '  email: string\n' +
            '  name?: string | null\n' +
            '}\n' +
            '\n' +
            'export type UserCreateOrConnectWithoutPostsInput = {\n' +
            '  where: Prisma.UserWhereUniqueInput\n' +
            '  create: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '}\n' +
            '\n' +
            'export type UserUpsertWithoutPostsInput = {\n' +
            '  update: Prisma.XOR<Prisma.UserUpdateWithoutPostsInput, Prisma.UserUncheckedUpdateWithoutPostsInput>\n' +
            '  create: Prisma.XOR<Prisma.UserCreateWithoutPostsInput, Prisma.UserUncheckedCreateWithoutPostsInput>\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateToOneWithWhereWithoutPostsInput = {\n' +
            '  where?: Prisma.UserWhereInput\n' +
            '  data: Prisma.XOR<Prisma.UserUpdateWithoutPostsInput, Prisma.UserUncheckedUpdateWithoutPostsInput>\n' +
            '}\n' +
            '\n' +
            'export type UserUpdateWithoutPostsInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            'export type UserUncheckedUpdateWithoutPostsInput = {\n' +
            '  email?: Prisma.StringFieldUpdateOperationsInput | string\n' +
            '  name?: Prisma.NullableStringFieldUpdateOperationsInput | string | null\n' +
            '}\n' +
            '\n' +
            '\n' +
            '/**\n' +
            ' * Count Type UserCountOutputType\n' +
            ' */\n' +
            '\n' +
            'export type UserCountOutputType = {\n' +
            ' '... 29476 more characters,
          fileName: '/Users/user/prisma-validator-repro/generated/prisma/models/User.ts',
          path: '/users/user/prisma-validator-repro/generated/prisma/models/user.ts',
          resolvedPath: '/users/user/prisma-validator-repro/generated/prisma/models/user.ts',
          originalFileName: '/Users/user/prisma-validator-repro/generated/prisma/models/User.ts',
          languageVersion: 10,
          languageVariant: 0,
          scriptKind: 3,
          isDeclarationFile: false,
          hasNoDefaultLib: false,
          locals: [Map],
          nextContainer: [NodeObject],
          endFlowNode: [Object],
          nodeCount: 4604,
          identifierCount: 1730,
          symbolCount: 595,
          parseDiagnostics: [],
          bindDiagnostics: [],
          bindSuggestionDiagnostics: undefined,
          lineMap: undefined,
          externalModuleIndicator: [NodeObject],
          setExternalModuleIndicator: [Function: callback],
          pragmas: [Map],
          checkJsDirective: [Object],
          referencedFiles: [],
          typeReferenceDirectives: [],
          libReferenceDirectives: [],
          amdDependencies: [],
          commentDirectives: undefined,
          identifiers: [Map],
          packageJsonLocations: undefined,
          packageJsonScope: undefined,
          imports: [Array],
          moduleAugmentations: [],
          ambientModuleNames: [],
          classifiableNames: [Set],
          impliedNodeFormat: undefined,
          jsDocParsingMode: 0,
          symbol: [SymbolObject]
        },
        length: 25,
        start: 11969,
        code: 'J - 104',
        messageText: 'Invalid index "user" in type "indexed-type-1777104669-67853-67948-1777104669-67840-67949-1777104669-67838-68228-1777104669-67542-68229-1777104669-0-129753<structure-1777104669-21405-21407-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21408-21411-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21412-21415-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753,structure-1777104669-21416-21419-1777104669-21391-21420-1777104669-21354-21421-1777104669-0-129753>"',
        node: undefined
      },
      node: <ref *1> NodeObject {
        pos: 11968,
        end: 11994,
        kind: 200,
        id: 1065,
        flags: 0,
        modifierFlagsCache: 0,
        transformFlags: 1,
        parent: NodeObject {
          pos: 11862,
          end: 11995,
          kind: 184,
          id: 1034,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: [NodeObject],
          original: undefined,
          emitNode: undefined,
          typeName: [NodeObject],
          typeArguments: [Array]
        },
        original: undefined,
        emitNode: undefined,
        objectType: NodeObject {
          pos: 11968,
          end: 11986,
          kind: 200,
          id: 1066,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: [Circular *1],
          original: undefined,
          emitNode: undefined,
          objectType: [NodeObject],
          indexType: [NodeObject]
        },
        indexType: NodeObject {
          pos: 11987,
          end: 11993,
          kind: 202,
          id: 1070,
          flags: 0,
          modifierFlagsCache: 0,
          transformFlags: 1,
          parent: [Circular *1],
          original: undefined,
          emitNode: undefined,
          literal: [NodeObject]
        }
      }
    }

More

The change to our type that introduces the error is 6e97000. Prior to that, validator generation succeeds.

create-validator-ts (ts-json-schema-generator) used to work with Prisma-generated types; Prisma introduced an incompatibility somewhere between 4.7.1 and 4.16.2.

Potential fix

An LLM was able to produce the following patch that works around the problem by being less strict with indexed types, allowing an unknown type instead of throwing an error:

diff --git a/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js b/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js
index b2ec937..fe5b262 100644
--- a/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js
+++ b/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js
@@ -62,9 +62,12 @@ class IndexedAccessTypeNodeParser {
                     if (objectType instanceof ReferenceType_js_1.ReferenceType) {
                         return objectType;
                     }
-                    throw new Errors_js_1.LogicError(node, `Invalid index "${type.getValue()}" in type "${objectType.getId()}"`);
+                    // Unknown index keys show up in some generated typings (e.g., Prisma
+                    // extension fields). Falling back to Unknown keeps schema generation
+                    // moving instead of throwing.
+                    return new UnknownType_js_1.UnknownType();
                 }
-                throw new Errors_js_1.LogicError(node, `No additional properties in type "${objectType.getId()}"`);
+                return new UnknownType_js_1.UnknownType();
             }
             return propertyType;
         });

A mechanism to auto-apply this patch can be seen on the patch branch.