@pegasusheavy/nestjs-prisma-graphql 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/helpers/is-many-and-return.ts","../src/helpers/pascal-case.ts","../src/handlers/args-type.ts","../src/event-names.ts","../src/handlers/combine-scalar-filters.ts","../src/handlers/create-aggregate-input.ts","../src/handlers/emit-single.ts","../src/helpers/import-declaration-map.ts","../src/handlers/generate-files.ts","../src/helpers/file-type-by-location.ts","../src/helpers/relative-path.ts","../src/helpers/get-graphql-import.ts","../src/helpers/get-graphql-input-type.ts","../src/helpers/get-property-type.ts","../src/helpers/get-where-unique-at-least-keys.ts","../src/helpers/is-where-unique-input-type.ts","../src/helpers/property-structure.ts","../src/handlers/input-type.ts","../src/helpers/object-settings.ts","../src/handlers/model-data.ts","../src/helpers/create-comment.ts","../src/helpers/detect-circular-deps.ts","../src/helpers/get-output-type-name.ts","../src/handlers/model-output-type.ts","../src/handlers/no-atomic-operations.ts","../src/helpers/get-enum-name.ts","../src/handlers/output-type.ts","../src/handlers/purge-output.ts","../src/handlers/re-export.ts","../src/handlers/prisma-enum-doc.ts","../src/handlers/register-enum.ts","../src/handlers/register-all-types.ts","../src/handlers/require-single-fields-in-whereunique-input.ts","../src/handlers/type-registry.ts","../src/handlers/warning.ts","../src/helpers/create-emit-blocks.ts","../src/helpers/create-config.ts","../src/helpers/generate-file-name.ts","../src/helpers/factory-get-source-file.ts","../src/helpers/get-model-name.ts","../src/generate.ts"],"names":["getModelName","inputType","outputType","StructureKind","outmatch","type","ok","JSON5","item","options","castArray","pupa","beforeInputType","nestjsGraphql","ReExport","beforeGenerateFiles","getExportDeclaration","block","merge","trim","args","memoize","end"],"mappings":"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","file":"generate.js","sourcesContent":["export function isManyAndReturnOutputType(name: string): boolean {\n const lowerName = name.toLowerCase();\n if (\n (lowerName.startsWith('createmany') || lowerName.startsWith('updatemany')) &&\n (lowerName.endsWith('andreturnoutputtype') || lowerName.endsWith('andreturn'))\n ) {\n return true;\n }\n\n return false;\n}\n","import { camelCase, startCase } from 'lodash-es';\n\nexport function pascalCase(string: string) {\n return startCase(camelCase(string)).replaceAll(' ', '');\n}\n","import { isManyAndReturnOutputType } from '../helpers/is-many-and-return.js';\nimport { pascalCase } from '../helpers/pascal-case.js';\nimport type { EventArguments, InputType, SchemaField } from '../types.js';\n\n/**\n * See https://github.com/prisma/prisma/blob/master/src/packages/client/src/generation/TSClient/Model.ts@getAggregationTypes\n * Subscribes on: 'ArgsType'\n */\nexport function argsType(field: SchemaField, args: EventArguments): void {\n if (['queryRaw', 'executeRaw'].includes(field.name)) {\n return;\n }\n if (isManyAndReturnOutputType(field.name)) return;\n\n const { eventEmitter, typeNames, getModelName } = args;\n let className = pascalCase(`${field.name}Args`);\n const modelName = getModelName(className) ?? '';\n\n switch (className) {\n case `Aggregate${modelName}Args`: {\n className = `${modelName}AggregateArgs`;\n break;\n }\n case `GroupBy${modelName}Args`: {\n className = `${modelName}GroupByArgs`;\n break;\n }\n }\n\n const inputType: InputType = {\n constraints: { maxNumFields: null, minNumFields: null },\n name: className,\n fields: [...field.args],\n };\n\n if (\n !field.args.some(x => x.name === '_count') &&\n [`${modelName}AggregateArgs`, `${modelName}GroupByArgs`].includes(className)\n ) {\n const names = ['Count', 'Avg', 'Sum', 'Min', 'Max'];\n if (`${modelName}GroupByArgs` === inputType.name) {\n // Make `by` property array only, noEnumerable\n const byField = inputType.fields.find(f => f.name === 'by');\n if (byField?.inputTypes) {\n byField.inputTypes = byField.inputTypes.filter(it => it.isList);\n }\n }\n for (const name of names) {\n if (!typeNames.has(`${modelName}${name}AggregateInput`)) {\n continue;\n }\n\n inputType.fields.push({\n name: `_${name.toLowerCase()}`,\n isRequired: false,\n isNullable: true,\n inputTypes: [\n {\n location: 'inputObjectTypes',\n type: `${modelName}${name}AggregateInput`,\n isList: false,\n },\n ],\n });\n }\n }\n\n eventEmitter.emitSync('InputType', {\n ...args,\n inputType,\n fileType: 'args',\n classDecoratorName: 'ArgsType',\n });\n}\n","export const BeforeGenerateField = 'BeforeGenerateField' as const;\n","import { cloneDeep, keyBy, remove } from 'lodash-es';\n\nimport { BeforeGenerateField } from '../event-names.js';\nimport type { EventArguments, EventEmitter, InputType, SchemaArg } from '../types.js';\n\n/**\n * Subscribes on 'BeforeInputType'\n */\nexport function combineScalarFilters(eventEmitter: EventEmitter): void {\n eventEmitter.on('BeforeInputType', beforeInputType);\n eventEmitter.on(BeforeGenerateField, beforeGenerateField);\n eventEmitter.on('PostBegin', postBegin);\n}\n\nfunction beforeInputType(\n args: EventArguments & {\n inputType: InputType;\n fileType: string;\n classDecoratorName: string;\n },\n): void {\n const { inputType, removeTypes } = args;\n\n if (isContainBogus(inputType.name) && isScalarFilter(inputType)) {\n removeTypes.add(inputType.name);\n inputType.name = replaceBogus(inputType.name);\n }\n}\n\nfunction beforeGenerateField(field: SchemaArg): void {\n for (const fieldInput of field.inputTypes) {\n if (fieldInput.location !== 'inputObjectTypes') {\n continue;\n }\n const fieldInputType = String(fieldInput.type);\n if (isContainBogus(fieldInputType)) {\n fieldInput.type = replaceBogus(fieldInputType);\n }\n }\n}\n\nfunction replaceBogus(name: string): string {\n return name.replaceAll(/Nullable|Nested/g, '');\n}\n\nfunction isContainBogus(name: string): boolean {\n return (\n name.startsWith('Nested') ||\n (name.includes('Nullable') && name.endsWith('Filter')) ||\n name.endsWith('NullableFilter')\n );\n}\n\nfunction isScalarFilter(inputType: InputType): boolean {\n if (!inputType.name.endsWith('Filter')) {\n return false;\n }\n let result = false;\n const equals = inputType.fields.find(f => f.name === 'equals');\n if (equals) {\n result = equals.inputTypes.every(x => {\n return ['enumTypes', 'scalar'].includes(x.location);\n });\n }\n return result;\n}\n\nfunction postBegin(args: EventArguments): void {\n const { modelNames, schema } = args;\n const inputTypes = schema.inputObjectTypes.prisma ?? [];\n const enumTypes = schema.enumTypes.model ?? [];\n const types = [\n 'Bool',\n 'Int',\n 'String',\n 'DateTime',\n 'Decimal',\n 'Float',\n 'Json',\n 'Bytes',\n 'BigInt',\n ];\n\n for (const enumType of enumTypes) {\n const { name } = enumType;\n types.push(`Enum${name}`);\n }\n\n const inputTypeByName = keyBy(inputTypes, it => it.name);\n const replaceBogusFilters = (filterName: string, filterNameCandidates: string[]): void => {\n for (const filterNameCandidate of filterNameCandidates) {\n const candidate = inputTypeByName[filterNameCandidate];\n if (candidate as InputType | undefined) {\n const it = cloneDeep({ ...candidate, name: filterName });\n inputTypes.push(it);\n inputTypeByName[filterName] = it;\n break;\n }\n }\n };\n\n for (const type of types) {\n // Scalar filters\n replaceBogusFilters(`${type}Filter`, [\n `${type}NullableFilter`,\n `Nested${type}NullableFilter`,\n ]);\n\n replaceBogusFilters(`${type}WithAggregatesFilter`, [\n `${type}NullableWithAggregatesFilter`,\n `Nested${type}NullableWithAggregatesFilter`,\n ]);\n\n replaceBogusFilters(`${type}ListFilter`, [\n `${type}NullableListFilter`,\n `Nested${type}NullableListFilter`,\n ]);\n }\n\n for (const modelName of modelNames) {\n replaceBogusFilters(`${modelName}RelationFilter`, [\n `${modelName}NullableRelationFilter`,\n ]);\n }\n\n for (const modelName of modelNames) {\n replaceBogusFilters(`${modelName}ScalarRelationFilter`, [\n `${modelName}NullableScalarRelationFilter`,\n ]);\n }\n\n remove(inputTypes, it => {\n return isContainBogus(it.name);\n });\n}\n","import type { EventArguments, InputType, OutputType } from '../types.js';\n\n/**\n * Create aggregate inputs from aggregate outputs.\n * See client/src/generation/TSClient.ts @ getAggregationTypes\n * Subscribes on: 'AggregateOutput'\n */\nexport function createAggregateInput(\n args: EventArguments & { outputType: OutputType },\n): void {\n const { eventEmitter, outputType } = args;\n const className = `${outputType.name}Input`;\n\n const inputType: InputType = {\n constraints: { maxNumFields: null, minNumFields: null },\n name: className,\n fields: outputType.fields.map(x => ({\n name: x.name,\n isNullable: x.isNullable ?? true,\n isRequired: false,\n inputTypes: [\n {\n isList: false,\n type: 'true',\n location: 'scalar',\n },\n ],\n })),\n };\n\n eventEmitter.emitSync('InputType', {\n ...args,\n inputType,\n fileType: 'input',\n classDecoratorName: 'InputType',\n });\n}\n","import { partition } from 'lodash-es';\nimport type { PropertyDeclarationStructure } from 'ts-morph';\n\nimport type { DMMF, EventEmitter } from '../types.js';\n\nexport function emitSingle(emitter: EventEmitter): void {\n emitter.on('ClassProperty', classProperty);\n}\n\nfunction classProperty(\n property: PropertyDeclarationStructure,\n eventArguments: {\n location: DMMF.FieldLocation;\n isList: boolean;\n propertyType: string[];\n },\n): void {\n const { location, isList, propertyType } = eventArguments;\n if (['inputObjectTypes', 'outputObjectTypes'].includes(location) && !isList) {\n const [safeTypes, instanceofTypes] = partition(\n propertyType,\n t => t === 'null' || t.startsWith('Prisma.'),\n );\n const mappedInstanceofTypes = instanceofTypes.map(t => `InstanceType<typeof ${t}>`);\n\n property.type = [...mappedInstanceofTypes, ...safeTypes].join(' | ');\n }\n}\n","import {\n type ImportDeclarationStructure,\n type ImportSpecifierStructure,\n type OptionalKind,\n StructureKind,\n} from 'ts-morph';\n\nexport class ImportDeclarationMap extends Map<\n string,\n OptionalKind<ImportDeclarationStructure>\n> {\n add(name: string, moduleSpecifier: string, isTypeOnly?: boolean): void;\n add(name: string, value: OptionalKind<ImportDeclarationStructure>): void;\n\n add(\n name: string,\n value: OptionalKind<ImportDeclarationStructure> | string,\n isTypeOnly?: boolean,\n ): void {\n if (!this.has(name)) {\n const structure: OptionalKind<ImportDeclarationStructure> =\n typeof value === 'string'\n ? { moduleSpecifier: value, namedImports: [{ name }], isTypeOnly }\n : value;\n this.set(name, structure);\n }\n }\n\n /**\n * Add a type-only import for ESM circular dependency resolution\n */\n addType(name: string, moduleSpecifier: string): void {\n const typeOnlyKey = `type:${name}`;\n if (!this.has(typeOnlyKey) && !this.has(name)) {\n this.set(typeOnlyKey, {\n moduleSpecifier,\n namedImports: [{ name }],\n isTypeOnly: true,\n });\n }\n }\n\n create(args: {\n name: string;\n from: string;\n defaultImport?: string | true;\n namespaceImport?: string;\n namedImport?: boolean;\n isTypeOnly?: boolean;\n }) {\n const { from, defaultImport, namespaceImport, namedImport, isTypeOnly } = args;\n let name = args.name;\n const value: OptionalKind<ImportDeclarationStructure> = {\n moduleSpecifier: from,\n namedImports: [] as OptionalKind<ImportSpecifierStructure>[],\n defaultImport: undefined as string | undefined,\n namespaceImport: undefined as string | undefined,\n isTypeOnly,\n };\n if (namedImport === true && namespaceImport) {\n value.namedImports = [{ name: namespaceImport }];\n name = namespaceImport;\n } else if (defaultImport) {\n value.defaultImport = defaultImport === true ? name : defaultImport;\n name = value.defaultImport;\n } else if (namespaceImport) {\n value.namespaceImport = namespaceImport;\n name = namespaceImport;\n } else {\n value.namedImports = [{ name }];\n }\n const key = isTypeOnly ? `type:${name}` : name;\n if (!this.has(key)) {\n this.set(key, value);\n }\n }\n\n *toStatements(): Iterable<ImportDeclarationStructure> {\n const iterator = this.values();\n let result = iterator.next();\n while (result.value) {\n yield {\n ...result.value,\n kind: StructureKind.ImportDeclaration,\n };\n result = iterator.next();\n }\n }\n}\n","import { ok } from 'node:assert';\nimport {\n type ClassDeclarationStructure,\n type ImportSpecifierStructure,\n type StatementStructures,\n StructureKind,\n} from 'ts-morph';\n\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport type { EventArguments } from '../types.js';\n\nexport async function generateFiles(args: EventArguments): Promise<void> {\n const { config, eventEmitter, output, project } = args;\n\n if (config.emitSingle) {\n const rootDirectory =\n project.getDirectory(output) ?? project.createDirectory(output);\n const sourceFile =\n rootDirectory.getSourceFile('index.ts') ??\n rootDirectory.createSourceFile('index.ts', undefined, { overwrite: true });\n const statements = project.getSourceFiles().flatMap(s => {\n if (s === sourceFile) {\n return [];\n }\n const classDeclaration = s.getClass(() => true);\n const stmts = s.getStructure().statements;\n // Reget decorator full name\n if (Array.isArray(stmts)) {\n for (const statement of stmts) {\n if (\n !(typeof statement === 'object' && statement.kind === StructureKind.Class)\n ) {\n continue;\n }\n for (const property of statement.properties ?? []) {\n for (const decorator of property.decorators ?? []) {\n const fullName = classDeclaration\n ?.getProperty(property.name)\n ?.getDecorator(decorator.name)\n ?.getFullName();\n ok(\n fullName,\n `Cannot get full name of decorator of class ${statement.name!}`,\n );\n decorator.name = fullName;\n }\n }\n }\n }\n\n project.removeSourceFile(s);\n return stmts;\n });\n const imports = new ImportDeclarationMap();\n const enums: (StatementStructures | string)[] = [];\n const classes: ClassDeclarationStructure[] = [];\n for (const statement of statements as (StatementStructures | string)[]) {\n if (typeof statement === 'string') {\n if (statement.startsWith('registerEnumType')) {\n enums.push(statement);\n }\n continue;\n }\n switch (statement.kind) {\n case StructureKind.ImportDeclaration: {\n if (\n statement.moduleSpecifier.startsWith('./') ||\n statement.moduleSpecifier.startsWith('..')\n ) {\n continue;\n }\n for (const namedImport of statement.namedImports as ImportSpecifierStructure[]) {\n const name = namedImport.alias ?? namedImport.name;\n imports.add(name, statement.moduleSpecifier);\n }\n if (statement.defaultImport) {\n imports.create({\n defaultImport: statement.defaultImport,\n from: statement.moduleSpecifier,\n name: statement.defaultImport,\n });\n }\n if (statement.namespaceImport) {\n imports.create({\n from: statement.moduleSpecifier,\n name: statement.namespaceImport,\n namespaceImport: statement.namespaceImport,\n });\n }\n break;\n }\n case StructureKind.Enum: {\n enums.unshift(statement);\n break;\n }\n case StructureKind.Class: {\n classes.push(statement);\n break;\n }\n }\n }\n for (const customImport of config.customImport) {\n imports.create(customImport);\n }\n sourceFile.set({\n kind: StructureKind.SourceFile,\n statements: [...imports.toStatements(), ...enums, ...classes],\n });\n }\n\n if (config.emitCompiled) {\n project.compilerOptions.set({\n declaration: true,\n declarationDir: output,\n emitDecoratorMetadata: false,\n outDir: output,\n rootDir: output,\n skipLibCheck: true,\n });\n const emitResult = await project.emit();\n const errors = emitResult.getDiagnostics().map(d => String(d.getMessageText()));\n if (errors.length > 0) {\n eventEmitter.emitSync('Warning', errors);\n }\n } else {\n await project.save();\n }\n}\n","import type { FieldLocation } from '../types.js';\n\nexport function fileTypeByLocation(fieldLocation: FieldLocation) {\n switch (fieldLocation) {\n case 'inputObjectTypes': {\n return 'input';\n }\n case 'outputObjectTypes': {\n return 'output';\n }\n case 'enumTypes': {\n return 'enum';\n }\n }\n return 'object';\n}\n","import getRelativePath from 'get-relative-path';\n\nexport function relativePath(from: string, to: string) {\n if (!from.startsWith('/')) {\n from = `/${from}`;\n }\n if (!to.startsWith('/')) {\n to = `/${to}`;\n }\n let result = getRelativePath(from, to);\n if (!result.startsWith('.')) {\n result = `./${result}`;\n }\n if (result.endsWith('.ts')) {\n result = result.slice(0, -3);\n }\n return result;\n}\n","import type { SourceFile } from 'ts-morph';\n\nimport type { FieldLocation, GeneratorConfiguration } from '../types.js';\nimport { fileTypeByLocation } from './file-type-by-location.js';\nimport { relativePath } from './relative-path.js';\n\nexport function getGraphqlImport(args: {\n sourceFile: SourceFile;\n typeName: string;\n location: FieldLocation;\n isId?: boolean;\n fileType?: string;\n noTypeId?: boolean;\n getSourceFile(args: { type: string; name: string }): SourceFile;\n config: GeneratorConfiguration;\n}): { name: string; specifier?: string } {\n const {\n config,\n fileType,\n getSourceFile,\n isId,\n location,\n noTypeId,\n sourceFile,\n typeName,\n } = args;\n\n if (location === 'scalar') {\n if (isId && !noTypeId) {\n return { name: 'ID', specifier: '@nestjs/graphql' };\n }\n\n const graphqlType = config.graphqlScalars[typeName];\n if (graphqlType) {\n return { name: graphqlType.name, specifier: graphqlType.specifier };\n }\n\n switch (typeName) {\n case 'Float':\n case 'Int': {\n return { name: typeName, specifier: '@nestjs/graphql' };\n }\n case 'DateTime': {\n return { name: 'Date', specifier: undefined };\n }\n case 'true':\n case 'Boolean': {\n return { name: 'Boolean', specifier: undefined };\n }\n case 'Decimal': {\n return {\n name: 'GraphQLDecimal',\n specifier: 'prisma-graphql-type-decimal',\n };\n }\n case 'Json': {\n return { name: 'GraphQLJSON', specifier: 'graphql-type-json' };\n }\n }\n\n return { name: 'String', specifier: undefined };\n }\n\n let sourceFileType = fileTypeByLocation(location);\n if (sourceFileType === 'output' && fileType === 'model') {\n sourceFileType = 'model';\n }\n\n const specifier = relativePath(\n sourceFile.getFilePath(),\n getSourceFile({\n name: typeName,\n type: sourceFileType,\n }).getFilePath(),\n );\n\n return { name: typeName, specifier };\n}\n","import { countBy, isEqual, uniqWith } from 'lodash-es';\nimport outmatch from 'outmatch';\n\nimport type { DMMF } from '../types.js';\n\n/**\n * Find input type for graphql field decorator.\n */\nexport function getGraphqlInputType(inputTypes: DMMF.InputTypeRef[], pattern?: string) {\n let result: DMMF.InputTypeRef | undefined;\n\n inputTypes = inputTypes.filter(t => !['null', 'Null'].includes(String(t.type)));\n inputTypes = uniqWith(inputTypes, isEqual);\n\n if (inputTypes.length === 1) {\n return inputTypes[0];\n }\n\n const countTypes = countBy(inputTypes, x => x.location);\n const isOneType = Object.keys(countTypes).length === 1;\n\n if (isOneType) {\n result = inputTypes.find(x => x.isList);\n if (result) {\n return result;\n }\n }\n\n if (pattern) {\n if (pattern.startsWith('matcher:') || pattern.startsWith('match:')) {\n const { 1: patternValue } = pattern.split(':', 2);\n const isMatch = outmatch(patternValue, { separator: false });\n result = inputTypes.find(x => isMatch(String(x.type)));\n if (result) {\n return result;\n }\n }\n result = inputTypes.find(x => String(x.type).includes(pattern));\n if (result) {\n return result;\n }\n }\n\n result = inputTypes.find(x => x.location === 'inputObjectTypes');\n if (result) {\n return result;\n }\n\n if (\n countTypes.enumTypes &&\n countTypes.scalar &&\n inputTypes.some(x => x.type === 'Json' && x.location === 'scalar')\n ) {\n result = inputTypes.find(x => x.type === 'Json' && x.location === 'scalar');\n if (result) {\n return result;\n }\n }\n\n if (\n (countTypes.scalar >= 1 || countTypes.enumTypes >= 1) &&\n countTypes.fieldRefTypes === 1\n ) {\n result = inputTypes.find(\n x => (x.location === 'scalar' || x.location === 'enumTypes') && x.isList,\n );\n\n if (result) {\n return result;\n }\n\n result = inputTypes.find(\n x => x.location === 'scalar' || x.location === 'enumTypes',\n );\n\n if (result) {\n return result;\n }\n }\n\n throw new TypeError(\n `Cannot get matching input type from ${\n inputTypes.map(x => x.type).join(', ') || 'zero length inputTypes'\n }`,\n );\n}\n","import type { FieldLocation } from '../types.js';\n\n/**\n * Returns typescript property type.\n */\nexport function getPropertyType(args: {\n type: string;\n location: FieldLocation;\n}): string[] {\n const { location, type } = args;\n switch (type) {\n case 'Float':\n case 'Int': {\n return ['number'];\n }\n case 'String': {\n return ['string'];\n }\n case 'Boolean': {\n return ['boolean'];\n }\n case 'DateTime': {\n return ['Date', 'string'];\n }\n case 'Decimal': {\n return ['Decimal'];\n }\n case 'Json': {\n return ['any'];\n }\n case 'Null': {\n return ['null'];\n }\n case 'Bytes': {\n return ['Uint8Array'];\n }\n case 'BigInt': {\n return ['bigint', 'number'];\n }\n }\n if (['inputObjectTypes', 'outputObjectTypes'].includes(location)) {\n return [type];\n }\n if (location === 'enumTypes') {\n const enumType = '`${' + type + '}`';\n\n return [enumType];\n }\n if (location === 'scalar') {\n return [type];\n }\n\n return ['unknown'];\n}\n","import type { DMMF } from '../types.js';\n\nexport function getWhereUniqueAtLeastKeys(model: DMMF.Model) {\n const names = model.fields\n .filter(field => field.isUnique || field.isId)\n .map(field => field.name);\n\n if (model.primaryKey) {\n names.push(createFieldName(model.primaryKey));\n }\n\n for (const uniqueIndex of model.uniqueIndexes) {\n names.push(createFieldName(uniqueIndex));\n }\n\n return names;\n}\n\nfunction createFieldName(args: { name?: string | null; fields: Readonly<string[]> }) {\n const { name, fields } = args;\n\n return name || fields.join('_');\n}\n","export function isWhereUniqueInputType(name: string) {\n return name.endsWith('WhereUniqueInput');\n}\n","import { type PropertyDeclarationStructure, StructureKind } from 'ts-morph';\n\n/**\n * Get property structure (field) for class.\n */\nexport function propertyStructure(args: {\n propertyType: string[];\n isList: boolean;\n name: string;\n isNullable?: boolean;\n hasQuestionToken?: boolean;\n hasExclamationToken?: boolean;\n}): PropertyDeclarationStructure {\n const {\n isNullable,\n propertyType,\n name,\n isList,\n hasQuestionToken,\n hasExclamationToken,\n } = args;\n const type = propertyType.map(type => (isList ? `Array<${type}>` : type)).join(' | ');\n\n return {\n kind: StructureKind.Property,\n name,\n type,\n hasQuestionToken: hasQuestionToken ?? isNullable,\n hasExclamationToken: hasExclamationToken ?? !isNullable,\n decorators: [],\n leadingTrivia: '\\n',\n };\n}\n","import { ok } from 'node:assert';\nimport JSON5 from 'json5';\nimport { castArray } from 'lodash-es';\nimport pupa from 'pupa';\nimport { type ClassDeclarationStructure, type StatementStructures, StructureKind } from 'ts-morph';\n\nimport { BeforeGenerateField } from '../event-names.js';\nimport { getGraphqlImport } from '../helpers/get-graphql-import.js';\nimport { getGraphqlInputType } from '../helpers/get-graphql-input-type.js';\nimport { getPropertyType } from '../helpers/get-property-type.js';\nimport { getWhereUniqueAtLeastKeys } from '../helpers/get-where-unique-at-least-keys.js';\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport { isWhereUniqueInputType } from '../helpers/is-where-unique-input-type.js';\nimport { propertyStructure } from '../helpers/property-structure.js';\nimport { relativePath } from '../helpers/relative-path.js';\nimport type { EventArguments, InputType } from '../types.js';\n\nexport function inputType(\n args: EventArguments & {\n inputType: InputType;\n fileType: string;\n classDecoratorName: string;\n },\n): void {\n const {\n circularDependencies,\n classDecoratorName,\n classTransformerTypeModels,\n config,\n eventEmitter,\n fieldSettings,\n fileType,\n getModelName,\n getSourceFile,\n inputType,\n models,\n output,\n removeTypes,\n typeNames,\n } = args;\n\n typeNames.add(inputType.name);\n\n const importDeclarations = new ImportDeclarationMap();\n const sourceFile = getSourceFile({\n name: inputType.name,\n type: fileType,\n });\n const classStructure: ClassDeclarationStructure = {\n kind: StructureKind.Class,\n isExported: true,\n name: inputType.name,\n decorators: [\n {\n name: classDecoratorName,\n arguments: [],\n },\n ],\n properties: [],\n };\n const modelName = getModelName(inputType.name) ?? '';\n const model = models.get(modelName);\n const modelFieldSettings = model && fieldSettings.get(model.name);\n const moduleSpecifier = '@nestjs/graphql';\n\n // Track types that need lazy loading due to circular dependencies\n const lazyTypes = new Set<string>();\n\n importDeclarations\n .set('Field', {\n namedImports: [{ name: 'Field' }],\n moduleSpecifier,\n })\n .set(classDecoratorName, {\n namedImports: [{ name: classDecoratorName }],\n moduleSpecifier,\n });\n\n // Add type registry imports if ESM compatible mode is enabled\n if (config.esmCompatible) {\n const typeRegistryPath = relativePath(\n sourceFile.getFilePath(),\n `${output}/type-registry.ts`,\n );\n importDeclarations.add('registerType', typeRegistryPath);\n importDeclarations.add('getType', typeRegistryPath);\n }\n\n const useInputType = config.useInputType.find(x =>\n inputType.name.includes(x.typeName),\n );\n const isWhereUnique = isWhereUniqueInputType(inputType.name);\n\n for (const field of inputType.fields) {\n field.inputTypes = field.inputTypes.filter(t => !removeTypes.has(String(t.type)));\n\n eventEmitter.emitSync(BeforeGenerateField, field, args);\n\n const { inputTypes, isRequired, name } = field;\n\n if (inputTypes.length === 0) {\n continue;\n }\n\n const usePattern = useInputType?.ALL ?? useInputType?.[name];\n const graphqlInputType = getGraphqlInputType(inputTypes, usePattern);\n const { isList, location, type } = graphqlInputType;\n const typeName = String(type);\n const settings = modelFieldSettings?.get(name);\n const propertySettings = settings?.getPropertyType({\n name: inputType.name,\n input: true,\n });\n const modelField = model?.fields.find(f => f.name === name);\n const isCustomsApplicable = typeName === modelField?.type;\n const atLeastKeys = model && getWhereUniqueAtLeastKeys(model);\n const whereUniqueInputTypeValue =\n isWhereUniqueInputType(typeName) &&\n atLeastKeys &&\n `Prisma.AtLeast<${typeName}, ${atLeastKeys\n .map(n => `'${n}'`)\n .join(' | ')}>`;\n\n const propertyType = castArray(\n propertySettings?.name ??\n (whereUniqueInputTypeValue ||\n getPropertyType({\n location,\n type: typeName,\n })),\n );\n\n const hasExclamationToken = Boolean(\n isWhereUnique &&\n config.unsafeCompatibleWhereUniqueInput &&\n atLeastKeys?.includes(name),\n );\n const property = propertyStructure({\n name,\n isNullable: !isRequired,\n hasExclamationToken: hasExclamationToken || undefined,\n hasQuestionToken: hasExclamationToken ? false : undefined,\n propertyType,\n isList,\n });\n\n classStructure.properties!.push(property);\n\n if (propertySettings) {\n importDeclarations.create({ ...propertySettings });\n } else if (propertyType.includes('Decimal')) {\n importDeclarations.add('Decimal', `${config.prismaClientImport}/../internal/prismaNamespace`);\n } else if (propertyType.some(p => p.startsWith('Prisma.'))) {\n importDeclarations.add('Prisma', config.prismaClientImport);\n }\n\n // Get graphql type\n let graphqlType: string;\n let useGetType = false;\n const shouldHideField =\n settings?.shouldHideField({\n name: inputType.name,\n input: true,\n }) ||\n config.decorate.some(\n d =>\n d.name === 'HideField' &&\n d.from === moduleSpecifier &&\n d.isMatchField(name) &&\n d.isMatchType(inputType.name),\n );\n\n const fieldType = settings?.getFieldType({\n name: inputType.name,\n input: true,\n });\n\n if (fieldType && isCustomsApplicable && !shouldHideField) {\n graphqlType = fieldType.name;\n importDeclarations.create({ ...fieldType });\n } else {\n // Import property type class\n const graphqlImport = getGraphqlImport({\n config,\n sourceFile,\n location,\n typeName,\n getSourceFile,\n });\n\n graphqlType = graphqlImport.name;\n let referenceName = propertyType[0];\n if (location === 'enumTypes') {\n const parts = referenceName.split(' ');\n referenceName = parts.at(-1) ?? parts[0];\n }\n\n // In ESM mode, always use getType() for input object types\n const shouldUseLazyType =\n config.esmCompatible && location === 'inputObjectTypes';\n\n // Handle self-references\n if (graphqlImport.name === inputType.name && shouldUseLazyType) {\n lazyTypes.add(graphqlImport.name);\n useGetType = true;\n } else if (\n graphqlImport.specifier &&\n !importDeclarations.has(graphqlImport.name) &&\n graphqlImport.name !== inputType.name\n ) {\n if (shouldUseLazyType) {\n importDeclarations.addType(graphqlImport.name, graphqlImport.specifier);\n lazyTypes.add(graphqlImport.name);\n } else {\n importDeclarations.set(graphqlImport.name, {\n namedImports: [{ name: graphqlImport.name }],\n moduleSpecifier: graphqlImport.specifier,\n });\n }\n }\n\n // Check if this type should use lazy loading\n if (lazyTypes.has(graphqlImport.name)) {\n useGetType = true;\n }\n }\n\n ok(property.decorators, 'property.decorators is undefined');\n\n if (shouldHideField) {\n importDeclarations.add('HideField', moduleSpecifier);\n property.decorators.push({ name: 'HideField', arguments: [] });\n } else {\n let typeExpression: string;\n if (useGetType) {\n typeExpression = isList\n ? `() => [getType('${graphqlType}')]`\n : `() => getType('${graphqlType}')`;\n } else {\n typeExpression = isList ? `() => [${graphqlType}]` : `() => ${graphqlType}`;\n }\n\n property.decorators.push({\n name: 'Field',\n arguments: [\n typeExpression,\n JSON5.stringify({\n ...settings?.fieldArguments(),\n nullable: !isRequired,\n }),\n ],\n });\n\n if (graphqlType === 'GraphQLDecimal') {\n importDeclarations.add('transformToDecimal', 'prisma-graphql-type-decimal');\n importDeclarations.add('Transform', 'class-transformer');\n importDeclarations.add('Type', 'class-transformer');\n\n property.decorators.push(\n {\n name: 'Type',\n arguments: ['() => Object'],\n },\n {\n name: 'Transform',\n arguments: ['transformToDecimal'],\n },\n );\n } else if (\n location === 'inputObjectTypes' &&\n (modelField?.type === 'Decimal' ||\n [\n 'connect',\n 'connectOrCreate',\n 'create',\n 'createMany',\n 'data',\n 'delete',\n 'deleteMany',\n 'disconnect',\n 'set',\n 'update',\n 'updateMany',\n 'upsert',\n 'where',\n ].includes(name) ||\n classTransformerTypeModels.has(getModelName(graphqlType) ?? '') ||\n (modelField?.kind === 'object' &&\n models.get(modelField.type) &&\n models\n .get(modelField.type)\n ?.fields.some(\n f =>\n f.kind === 'object' && classTransformerTypeModels.has(f.type),\n )))\n ) {\n importDeclarations.add('Type', 'class-transformer');\n if (useGetType) {\n property.decorators.push({\n name: 'Type',\n arguments: [`getType('${graphqlType}')`],\n });\n } else {\n property.decorators.push({ name: 'Type', arguments: [`() => ${graphqlType}`] });\n }\n }\n\n if (isCustomsApplicable) {\n for (const options of settings ?? []) {\n if (\n (options.kind === 'Decorator' && options.input && options.match?.(name)) ??\n true\n ) {\n property.decorators.push({\n name: options.name,\n arguments: options.arguments as string[],\n });\n ok(options.from, \"Missed 'from' part in configuration or field setting\");\n importDeclarations.create(options);\n }\n }\n }\n\n for (const decorate of config.decorate) {\n if (decorate.isMatchField(name) && decorate.isMatchType(inputType.name)) {\n property.decorators.push({\n name: decorate.name,\n arguments: decorate.arguments?.map(x => pupa(x, { propertyType })),\n });\n importDeclarations.create(decorate);\n }\n }\n }\n\n eventEmitter.emitSync('ClassProperty', property, {\n location,\n isList,\n propertyType,\n });\n }\n\n // Build statements array\n const statements: (StatementStructures | string)[] = [\n ...importDeclarations.toStatements(),\n classStructure,\n ];\n\n // Add registerType call if ESM compatible mode is enabled\n if (config.esmCompatible) {\n statements.push(`\\nregisterType('${inputType.name}', ${inputType.name});`);\n }\n\n sourceFile.set({\n statements,\n });\n}\n","import JSON5 from 'json5';\nimport { isObject, merge, omit, trim } from 'lodash-es';\nimport outmatch from 'outmatch';\nimport type { PlainObject } from 'simplytyped';\n\nimport type { GeneratorConfiguration } from '../types.js';\n\nexport type ObjectSetting = {\n /**\n * Act as named import or namespaceImport or defaultImport\n */\n name: string;\n kind: 'Decorator' | 'Field' | 'FieldType' | 'PropertyType' | 'ObjectType';\n arguments?: string[] | Record<string, unknown>;\n input: boolean;\n output: boolean;\n model: boolean;\n match?: (test: string) => boolean;\n from: string;\n namespace?: string;\n defaultImport?: string | true;\n namespaceImport?: string;\n namedImport?: boolean;\n};\n\ninterface ObjectSettingsFilterArgs {\n name: string;\n input?: boolean;\n output?: boolean;\n}\n\nexport class ObjectSettings extends Array<ObjectSetting> {\n shouldHideField({\n name,\n input = false,\n output = false,\n }: ObjectSettingsFilterArgs): boolean {\n const hideField = this.find(s => s.name === 'HideField');\n\n return Boolean(\n (hideField?.input && input) ||\n (hideField?.output && output) ||\n hideField?.match?.(name),\n );\n }\n\n getFieldType({\n name,\n input,\n output,\n }: ObjectSettingsFilterArgs): ObjectSetting | undefined {\n const fieldType = this.find(s => s.kind === 'FieldType');\n\n if (!fieldType) {\n return undefined;\n }\n\n if (fieldType.match) {\n return fieldType.match(name) ? fieldType : undefined;\n }\n\n if (input && !fieldType.input) {\n return undefined;\n }\n\n if (output && !fieldType.output) {\n return undefined;\n }\n\n return fieldType;\n }\n\n getPropertyType({\n name,\n input,\n output,\n }: ObjectSettingsFilterArgs): ObjectSetting | undefined {\n const propertyType = this.find(s => s.kind === 'PropertyType');\n\n if (!propertyType) {\n return undefined;\n }\n\n if (propertyType.match) {\n return propertyType.match(name) ? propertyType : undefined;\n }\n\n if (input && !propertyType.input) {\n return undefined;\n }\n\n if (output && !propertyType.output) {\n return undefined;\n }\n\n return propertyType;\n }\n\n getObjectTypeArguments(options: Record<string, unknown>): string[] {\n const objectTypeOptions = merge({}, options);\n const resultArguments: unknown[] = [objectTypeOptions];\n const objectType = this.find(s => s.kind === 'ObjectType');\n if (objectType && isObject(objectType.arguments)) {\n const name = (objectType.arguments as PlainObject).name;\n merge(objectTypeOptions, omit(objectType.arguments, 'name'));\n if (name) {\n resultArguments.unshift(name);\n }\n }\n return resultArguments.map(x => JSON5.stringify(x));\n }\n\n fieldArguments(): Record<string, unknown> | undefined {\n const item = this.find(item => item.kind === 'Field');\n if (item) {\n return item.arguments as Record<string, unknown>;\n }\n }\n}\n\nexport function createObjectSettings(args: {\n text: string;\n config: GeneratorConfiguration;\n}) {\n const { config, text } = args;\n const result = new ObjectSettings();\n const textLines = text.split('\\n');\n const documentationLines: string[] = [];\n\n let fieldElement = result.find(item => item.kind === 'Field');\n if (!fieldElement) {\n fieldElement = {\n name: '',\n kind: 'Field',\n arguments: {},\n } as ObjectSetting;\n }\n\n for (const line of textLines) {\n const match = /^@(?<name>\\w+(\\.(\\w+))?)\\((?<args>.*)\\)/.exec(line);\n const { element, documentLine } = createSettingElement({\n line,\n config,\n fieldElement,\n match,\n });\n\n if (element) {\n result.push(element);\n }\n\n if (documentLine) {\n documentationLines.push(line);\n }\n }\n\n return {\n settings: result,\n documentation: documentationLines.filter(Boolean).join('\\n') || undefined,\n };\n}\n\nfunction createSettingElement({\n line,\n config,\n fieldElement,\n match,\n}: {\n line: string;\n config: GeneratorConfiguration;\n fieldElement: ObjectSetting;\n match: RegExpExecArray | null;\n}) {\n const result = {\n documentLine: '',\n element: undefined as ObjectSetting | undefined,\n };\n if (line.startsWith('@deprecated')) {\n (fieldElement.arguments as Record<string, unknown>)['deprecationReason'] = trim(line.slice(11));\n\n result.element = fieldElement;\n\n return result;\n }\n\n if (line.startsWith('@complexity')) {\n let n = Number.parseInt(trim(line.slice(11)));\n if (n !== n || n < 1) n = 1;\n (fieldElement.arguments as Record<string, unknown>)['complexity'] = n;\n\n result.element = fieldElement;\n\n return result;\n }\n\n const name = match?.groups?.name;\n\n if (!(match && name)) {\n result.documentLine = line;\n return result;\n }\n\n const element: ObjectSetting = {\n kind: 'Decorator',\n name: '',\n arguments: [],\n input: false,\n output: false,\n model: false,\n from: '',\n };\n\n result.element = element;\n\n if (name === 'TypeGraphQL.omit' || name === 'HideField') {\n Object.assign(element, hideFieldDecorator(match));\n\n return result;\n }\n\n if (['FieldType', 'PropertyType'].includes(name) && match.groups?.args) {\n const options = customType(match.groups.args);\n merge(element, options.namespace && config.fields[options.namespace], options, {\n kind: name,\n });\n return result;\n }\n\n if (name === 'ObjectType' && match.groups?.args) {\n element.kind = 'ObjectType';\n const options = customType(match.groups.args) as Record<string, unknown>;\n if (typeof options[0] === 'string' && options[0]) {\n options.name = options[0];\n }\n if (isObject(options[1])) {\n merge(options, options[1]);\n }\n element.arguments = {\n name: options.name,\n isAbstract: options.isAbstract,\n };\n\n return result;\n }\n\n if (name === 'Directive' && match.groups?.args) {\n const options = customType(match.groups.args);\n merge(element, { model: true, from: '@nestjs/graphql' }, options, {\n name,\n namespace: false,\n kind: 'Decorator',\n arguments: Array.isArray(options.arguments)\n ? options.arguments.map(s => JSON5.stringify(s))\n : options.arguments,\n });\n\n return result;\n }\n\n const namespace = getNamespace(name);\n element.namespaceImport = namespace;\n const options = {\n name,\n arguments: (match.groups?.args || '')\n .split(',')\n .map(s => trim(s))\n .filter(Boolean),\n };\n merge(element, namespace && config.fields[namespace], options);\n\n return result;\n}\n\nfunction customType(args: string) {\n const result: Partial<ObjectSetting> = {};\n let options = parseArgs(args);\n if (typeof options === 'string') {\n options = { name: options };\n }\n Object.assign(result, options);\n const namespace = getNamespace(options.name);\n result.namespace = namespace;\n if ((options as { name: string | undefined }).name?.includes('.')) {\n result.namespaceImport = namespace;\n }\n\n if (typeof options.match === 'string' || Array.isArray(options.match)) {\n result.match = outmatch(options.match, { separator: false });\n }\n\n return result;\n}\n\nfunction hideFieldDecorator(match: RegExpExecArray) {\n const result: Partial<ObjectSetting> = {\n name: 'HideField',\n arguments: [],\n from: '@nestjs/graphql',\n defaultImport: undefined,\n namespaceImport: undefined,\n match: undefined,\n };\n if (!match.groups?.args) {\n result.output = true;\n return result;\n }\n\n if (match.groups.args.includes('{') && match.groups.args.includes('}')) {\n const options = parseArgs(match.groups.args) as Record<string, unknown>;\n result.output = Boolean(options.output);\n result.input = Boolean(options.input);\n if (typeof options.match === 'string' || Array.isArray(options.match)) {\n result.match = outmatch(options.match, { separator: false });\n }\n } else {\n if (/output:\\s*true/.test(match.groups.args)) {\n result.output = true;\n }\n if (/input:\\s*true/.test(match.groups.args)) {\n result.input = true;\n }\n }\n\n return result;\n}\n\nfunction parseArgs(string: string): Record<string, unknown> | string {\n try {\n return JSON5.parse(string);\n } catch {\n try {\n return JSON5.parse(`[${string}]`);\n } catch {\n throw new Error(`Failed to parse: ${string}`);\n }\n }\n}\n\nfunction getNamespace(name: unknown): string | undefined {\n if (name === undefined) {\n return undefined;\n }\n let result = String(name);\n if (result.includes('.')) {\n [result] = result.split('.');\n }\n return result;\n}\n","import { createObjectSettings, ObjectSettings } from '../helpers/object-settings.js';\nimport type { EventArguments, Field, Model } from '../types.js';\n\nexport function modelData(model: Model, args: EventArguments): void {\n const {\n config,\n modelNames,\n models,\n modelFields,\n fieldSettings,\n classTransformerTypeModels,\n } = args;\n\n modelNames.push(model.name);\n models.set(model.name, model);\n\n const modelFieldsValue = new Map<string, Field>();\n modelFields.set(model.name, modelFieldsValue);\n\n const fieldSettingsValue = new Map<string, ObjectSettings>();\n fieldSettings.set(model.name, fieldSettingsValue);\n\n for (const field of model.fields) {\n if (field.documentation) {\n const { documentation, settings } = createObjectSettings({\n text: field.documentation,\n config,\n });\n field.documentation = documentation;\n fieldSettingsValue.set(field.name, settings);\n }\n modelFieldsValue.set(field.name, field);\n }\n\n if (model.fields.some(field => field.type === 'Decimal')) {\n classTransformerTypeModels.add(model.name);\n }\n}\n","import type { ObjectSettings } from '../types.js';\n\nexport function createComment(documentation: string, settings?: ObjectSettings) {\n const documentationLines = documentation.split('\\n');\n const commentLines = ['/**'];\n\n for (const line of documentationLines) {\n commentLines.push(` * ${line}`);\n }\n\n const deprecationReason = settings?.fieldArguments()?.deprecationReason as string;\n\n if (deprecationReason) {\n commentLines.push(` * @deprecated ${deprecationReason}`);\n }\n\n commentLines.push(' */\\n');\n\n return commentLines.join('\\n');\n}\n","import type { Model } from '../types.js';\n\n/**\n * Represents a dependency graph where keys are model names and values are sets of dependent model names\n */\nexport type DependencyGraph = Map<string, Set<string>>;\n\n/**\n * Represents a set of model name pairs that have circular dependencies\n * Format: \"ModelA:ModelB\" where ModelA < ModelB alphabetically\n */\nexport type CircularDependencySet = Set<string>;\n\n/**\n * Build a dependency graph from Prisma models based on their relations\n */\nexport function buildDependencyGraph(models: Model[]): DependencyGraph {\n const graph: DependencyGraph = new Map();\n\n // Initialize all models in the graph\n for (const model of models) {\n graph.set(model.name, new Set());\n }\n\n // Add edges for each relation field\n for (const model of models) {\n const dependencies = graph.get(model.name)!;\n for (const field of model.fields) {\n // Only consider object/relation fields that reference other models\n if (field.kind === 'object' && field.type !== model.name) {\n // Check if the referenced type is actually a model\n if (graph.has(field.type)) {\n dependencies.add(field.type);\n }\n }\n }\n }\n\n return graph;\n}\n\n/**\n * Detect all circular dependencies in the dependency graph using DFS\n * Returns a set of model pairs that form cycles\n */\nexport function detectCircularDependencies(graph: DependencyGraph): CircularDependencySet {\n const circularPairs: CircularDependencySet = new Set();\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n function dfs(node: string): void {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const dependencies = graph.get(node) || new Set();\n for (const dep of dependencies) {\n if (!visited.has(dep)) {\n dfs(dep);\n } else if (recursionStack.has(dep)) {\n // Found a cycle - record all pairs in the cycle path\n const cycleStartIndex = path.indexOf(dep);\n if (cycleStartIndex !== -1) {\n const cyclePath = path.slice(cycleStartIndex);\n // Add all pairs in the cycle\n for (let i = 0; i < cyclePath.length; i++) {\n const a = cyclePath[i];\n const b = cyclePath[(i + 1) % cyclePath.length];\n // Store in alphabetical order for consistency\n const pair = a < b ? `${a}:${b}` : `${b}:${a}`;\n circularPairs.add(pair);\n }\n }\n }\n }\n\n path.pop();\n recursionStack.delete(node);\n }\n\n // Run DFS from each unvisited node\n for (const node of graph.keys()) {\n if (!visited.has(node)) {\n dfs(node);\n }\n }\n\n return circularPairs;\n}\n\n/**\n * Check if two models have a circular dependency relationship\n */\nexport function hasCircularDependency(\n circularDeps: CircularDependencySet,\n modelA: string,\n modelB: string,\n): boolean {\n const pair = modelA < modelB ? `${modelA}:${modelB}` : `${modelB}:${modelA}`;\n return circularDeps.has(pair);\n}\n\n/**\n * Get all models that are involved in any circular dependency\n */\nexport function getModelsInCircularDeps(circularDeps: CircularDependencySet): Set<string> {\n const models = new Set<string>();\n for (const pair of circularDeps) {\n const [a, b] = pair.split(':');\n models.add(a);\n models.add(b);\n }\n return models;\n}\n","export function getOutputTypeName(name: string) {\n return name.replace(/(?:OutputType|Output)$/, '');\n}\n","import { ok } from 'node:assert';\nimport JSON5 from 'json5';\nimport { castArray } from 'lodash-es';\nimport pupa from 'pupa';\nimport type { PlainObject } from 'simplytyped';\nimport {\n type ClassDeclarationStructure,\n type ExportSpecifierStructure,\n type StatementStructures,\n StructureKind,\n} from 'ts-morph';\n\nimport { createComment } from '../helpers/create-comment.js';\nimport { hasCircularDependency } from '../helpers/detect-circular-deps.js';\nimport { getGraphqlImport } from '../helpers/get-graphql-import.js';\nimport { getOutputTypeName } from '../helpers/get-output-type-name.js';\nimport { getPropertyType } from '../helpers/get-property-type.js';\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport { isManyAndReturnOutputType } from '../helpers/is-many-and-return.js';\nimport {\n createObjectSettings,\n type ObjectSetting,\n ObjectSettings,\n} from '../helpers/object-settings.js';\nimport { propertyStructure } from '../helpers/property-structure.js';\nimport { relativePath } from '../helpers/relative-path.js';\nimport type { EventArguments, OutputType } from '../types.js';\n\nconst nestjsGraphql = '@nestjs/graphql';\n\nexport function modelOutputType(outputType: OutputType, args: EventArguments): void {\n const {\n circularDependencies,\n config,\n eventEmitter,\n fieldSettings,\n getSourceFile,\n modelFields,\n models,\n output,\n } = args;\n\n if (isManyAndReturnOutputType(outputType.name)) return;\n\n const model = models.get(outputType.name);\n ok(model, `Cannot find model by name ${outputType.name}`);\n\n const sourceFile = getSourceFile({\n name: outputType.name,\n type: 'model',\n });\n const sourceFileStructure = sourceFile.getStructure();\n const exportDeclaration = getExportDeclaration(\n model.name,\n sourceFileStructure.statements as StatementStructures[],\n );\n const importDeclarations = new ImportDeclarationMap();\n const classStructure: ClassDeclarationStructure = {\n decorators: [\n {\n arguments: [],\n name: 'ObjectType',\n },\n ],\n isExported: true,\n kind: StructureKind.Class,\n name: outputType.name,\n properties: [],\n };\n (sourceFileStructure.statements as StatementStructures[]).push(classStructure);\n ok(classStructure.decorators, 'classStructure.decorators is undefined');\n const decorator = classStructure.decorators.find(d => d.name === 'ObjectType');\n ok(decorator, 'ObjectType decorator not found');\n\n let modelSettings: ObjectSettings | undefined;\n // Get model settings from documentation\n if (model.documentation) {\n const objectTypeOptions: PlainObject = {};\n const { documentation, settings } = createObjectSettings({\n config,\n text: model.documentation,\n });\n if (documentation) {\n if (!classStructure.leadingTrivia) {\n classStructure.leadingTrivia = createComment(documentation);\n }\n objectTypeOptions.description = documentation;\n }\n decorator.arguments = settings.getObjectTypeArguments(objectTypeOptions);\n modelSettings = settings;\n }\n\n importDeclarations.add('Field', nestjsGraphql);\n importDeclarations.add('ObjectType', nestjsGraphql);\n\n // Track types that need lazy loading due to circular dependencies\n const lazyTypes = new Set<string>();\n\n // Add type registry imports if ESM compatible mode is enabled\n if (config.esmCompatible) {\n const typeRegistryPath = relativePath(\n sourceFile.getFilePath(),\n `${output}/type-registry.ts`,\n );\n importDeclarations.add('registerType', typeRegistryPath);\n importDeclarations.add('getType', typeRegistryPath);\n }\n\n for (const field of outputType.fields) {\n if (config.omitModelsCount && field.name === '_count') continue;\n\n let fileType = 'model';\n const { isList, location, namespace, type } = field.outputType;\n\n let outputTypeName = String(type);\n if (namespace !== 'model') {\n fileType = 'output';\n outputTypeName = getOutputTypeName(outputTypeName);\n }\n const modelField = modelFields.get(model.name)?.get(field.name);\n const settings = fieldSettings.get(model.name)?.get(field.name);\n const fieldType = settings?.getFieldType({\n name: outputType.name,\n output: true,\n });\n const propertySettings = settings?.getPropertyType({\n name: outputType.name,\n output: true,\n });\n\n const propertyType = castArray(\n propertySettings?.name ??\n getPropertyType({\n location,\n type: outputTypeName,\n }),\n );\n\n // For model we keep only one type\n propertyType.splice(1, propertyType.length);\n\n if (field.isNullable && !isList) {\n propertyType.push('null');\n }\n\n let graphqlType: string;\n let useGetType = false;\n\n if (fieldType) {\n graphqlType = fieldType.name;\n importDeclarations.create({ ...fieldType });\n } else {\n const graphqlImport = getGraphqlImport({\n config,\n fileType,\n getSourceFile,\n isId: modelField?.isId,\n location,\n noTypeId: config.noTypeId,\n sourceFile,\n typeName: outputTypeName,\n });\n\n graphqlType = graphqlImport.name;\n\n if (graphqlImport.name !== outputType.name && graphqlImport.specifier) {\n // Check for circular dependency in ESM mode\n const isCircular =\n config.esmCompatible &&\n location === 'outputObjectTypes' &&\n namespace === 'model' &&\n hasCircularDependency(circularDependencies, outputType.name, outputTypeName);\n\n if (isCircular) {\n importDeclarations.addType(graphqlImport.name, graphqlImport.specifier);\n lazyTypes.add(graphqlImport.name);\n useGetType = true;\n } else {\n importDeclarations.add(graphqlImport.name, graphqlImport.specifier);\n }\n }\n }\n\n const property = propertyStructure({\n hasExclamationToken: true,\n hasQuestionToken: location === 'outputObjectTypes',\n isList,\n isNullable: field.isNullable,\n name: field.name,\n propertyType,\n });\n\n if (typeof property.leadingTrivia === 'string' && modelField?.documentation) {\n property.leadingTrivia += createComment(modelField.documentation, settings);\n }\n\n classStructure.properties?.push(property);\n\n if (propertySettings) {\n importDeclarations.create({ ...propertySettings });\n } else if (propertyType.includes('Decimal')) {\n importDeclarations.add('Decimal', `${config.prismaClientImport}/../internal/prismaNamespace`);\n }\n\n ok(property.decorators, 'property.decorators is undefined');\n\n const shouldHideField =\n settings?.shouldHideField({ name: outputType.name, output: true }) ||\n config.decorate.some(\n d =>\n d.name === 'HideField' &&\n d.from === '@nestjs/graphql' &&\n d.isMatchField(field.name) &&\n d.isMatchType(outputTypeName),\n );\n\n if (shouldHideField) {\n importDeclarations.add('HideField', nestjsGraphql);\n property.decorators.push({ arguments: [], name: 'HideField' });\n } else {\n // Generate `@Field()` decorator\n let typeExpression: string;\n if (useGetType) {\n typeExpression = isList\n ? `() => [getType('${graphqlType}')]`\n : `() => getType('${graphqlType}')`;\n } else {\n typeExpression = isList ? `() => [${graphqlType}]` : `() => ${graphqlType}`;\n }\n\n property.decorators.push({\n arguments: [\n typeExpression,\n JSON5.stringify({\n ...settings?.fieldArguments(),\n defaultValue: ['number', 'string', 'boolean'].includes(\n typeof modelField?.default,\n )\n ? modelField?.default\n : undefined,\n description: modelField?.documentation,\n nullable: Boolean(field.isNullable),\n }),\n ],\n name: 'Field',\n });\n\n for (const setting of settings ?? []) {\n if (shouldBeDecorated(setting) && (setting.match?.(field.name) ?? true)) {\n property.decorators.push({\n arguments: setting.arguments as string[],\n name: setting.name,\n });\n ok(setting.from, \"Missed 'from' part in configuration or field setting\");\n importDeclarations.create(setting);\n }\n }\n\n for (const decorate of config.decorate) {\n if (decorate.isMatchField(field.name) && decorate.isMatchType(outputTypeName)) {\n property.decorators.push({\n arguments: decorate.arguments?.map(x => pupa(x, { propertyType })),\n name: decorate.name,\n });\n importDeclarations.create(decorate);\n }\n }\n }\n\n eventEmitter.emitSync('ClassProperty', property, {\n isList,\n location,\n propertyType,\n });\n }\n\n // Generate class decorators from model settings\n for (const setting of modelSettings ?? []) {\n if (shouldBeDecorated(setting)) {\n classStructure.decorators.push({\n arguments: setting.arguments as string[],\n name: setting.name,\n });\n importDeclarations.create(setting);\n }\n }\n\n // Build statements array\n const statements: (StatementStructures | string)[] = [\n ...importDeclarations.toStatements(),\n classStructure,\n ];\n\n // Add registerType call if ESM compatible mode is enabled\n if (config.esmCompatible) {\n statements.push(`\\nregisterType('${outputType.name}', ${outputType.name});`);\n }\n\n if (exportDeclaration) {\n sourceFile.set({\n statements: [exportDeclaration, '\\n', classStructure],\n });\n const classDeclaration = sourceFile.getClassOrThrow(model.name);\n const commentedText = classDeclaration\n .getText()\n .split('\\n')\n .map(x => `// ${x}`);\n classDeclaration.remove();\n sourceFile.addStatements(['\\n', ...commentedText]);\n } else {\n sourceFile.set({\n statements,\n });\n }\n}\n\nfunction shouldBeDecorated(setting: ObjectSetting): boolean {\n return (\n setting.kind === 'Decorator' &&\n (setting.output || setting.model) &&\n !(setting.output && setting.model)\n );\n}\n\nfunction getExportDeclaration(name: string, statements: StatementStructures[]): StatementStructures | undefined {\n return statements.find(structure => {\n return (\n structure.kind === StructureKind.ExportDeclaration &&\n (structure.namedExports as ExportSpecifierStructure[]).some(\n o => (o.alias ?? o.name) === name,\n )\n );\n });\n}\n","import type { EventArguments, EventEmitter, InputType } from '../types.js';\n\nexport function noAtomicOperations(eventEmitter: EventEmitter): void {\n eventEmitter.on('BeforeInputType', beforeInputType);\n eventEmitter.on('BeforeGenerateFiles', beforeGenerateFiles);\n}\n\nfunction beforeInputType(args: EventArguments & { inputType: InputType }): void {\n const { inputType, getModelName } = args;\n\n for (const field of inputType.fields) {\n const fieldName = field.name;\n field.inputTypes = field.inputTypes.filter(it => {\n const inputTypeName = String(it.type);\n const modelName = getModelName(inputTypeName);\n\n if (\n isAtomicOperation(inputTypeName) ||\n (modelName && isListInput(inputTypeName, modelName, fieldName))\n ) {\n return false;\n }\n return true;\n });\n }\n}\n\nfunction beforeGenerateFiles(args: EventArguments): void {\n const { project } = args;\n\n for (const sourceFile of project.getSourceFiles()) {\n const className = sourceFile.getClass(() => true)?.getName();\n\n if (className && isAtomicOperation(className)) {\n project.removeSourceFile(sourceFile);\n }\n }\n}\n\nfunction isAtomicOperation(typeName: string): boolean {\n if (typeName.endsWith('FieldUpdateOperationsInput')) {\n return true;\n }\n return false;\n}\n\nfunction isListInput(typeName: string, model: string, field: string): boolean {\n return (\n typeName === `${model}Create${field}Input` ||\n typeName === `${model}Update${field}Input`\n );\n}\n","export function getEnumName(referenceName: string) {\n // `${Role}`\n return referenceName.slice(3, -2);\n}\n","import { ok } from 'node:assert';\nimport JSON5 from 'json5';\nimport { castArray } from 'lodash-es';\nimport { type ClassDeclarationStructure, StructureKind } from 'ts-morph';\n\nimport { getEnumName } from '../helpers/get-enum-name.js';\nimport { getGraphqlImport } from '../helpers/get-graphql-import.js';\nimport { getOutputTypeName } from '../helpers/get-output-type-name.js';\nimport { getPropertyType } from '../helpers/get-property-type.js';\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport { propertyStructure } from '../helpers/property-structure.js';\nimport type { EventArguments, OutputType } from '../types.js';\n\nconst nestjsGraphql = '@nestjs/graphql';\n\nexport function outputType(outputTypeArg: OutputType, args: EventArguments): void {\n const { config, eventEmitter, fieldSettings, getModelName, getSourceFile, models } =\n args;\n const importDeclarations = new ImportDeclarationMap();\n\n const fileType = 'output';\n const modelName = getModelName(outputTypeArg.name) ?? '';\n const model = models.get(modelName);\n const isAggregateOutput =\n model &&\n /(?:Count|Avg|Sum|Min|Max)AggregateOutputType$/.test(outputTypeArg.name) &&\n String(outputTypeArg.name).startsWith(model.name);\n const isCountOutput =\n model?.name && outputTypeArg.name === `${model.name}CountOutputType`;\n\n if (!config.emitBlocks.outputs && !isCountOutput) return;\n\n // Get rid of bogus suffixes\n outputTypeArg.name = getOutputTypeName(outputTypeArg.name);\n\n if (isAggregateOutput) {\n eventEmitter.emitSync('AggregateOutput', { ...args, outputType: outputTypeArg });\n }\n\n const sourceFile = getSourceFile({\n name: outputTypeArg.name,\n type: fileType,\n });\n\n const classStructure: ClassDeclarationStructure = {\n decorators: [\n {\n arguments: [],\n name: 'ObjectType',\n },\n ],\n isExported: true,\n kind: StructureKind.Class,\n name: outputTypeArg.name,\n properties: [],\n };\n\n importDeclarations.add('Field', nestjsGraphql);\n importDeclarations.add('ObjectType', nestjsGraphql);\n\n for (const field of outputTypeArg.fields) {\n const { isList, location, type } = field.outputType;\n const outputTypeName = getOutputTypeName(String(type));\n const settings = isCountOutput\n ? undefined\n : model && fieldSettings.get(model.name)?.get(field.name);\n const propertySettings = settings?.getPropertyType({\n name: outputTypeArg.name,\n output: true,\n });\n\n const isCustomsApplicable =\n outputTypeName === model?.fields.find(f => f.name === field.name)?.type;\n\n field.outputType.type = outputTypeName;\n\n const propertyType = castArray(\n propertySettings?.name ??\n getPropertyType({\n location,\n type: outputTypeName,\n }),\n );\n\n const property = propertyStructure({\n hasQuestionToken: isCountOutput ? true : undefined,\n isList,\n isNullable: field.isNullable,\n name: field.name,\n propertyType,\n });\n\n classStructure.properties?.push(property);\n\n if (propertySettings) {\n importDeclarations.create({ ...propertySettings });\n } else if (propertyType.includes('Decimal')) {\n importDeclarations.add('Decimal', `${config.prismaClientImport}/../internal/prismaNamespace`);\n }\n\n // Get graphql type\n let graphqlType: string;\n const shouldHideField =\n settings?.shouldHideField({\n name: outputTypeArg.name,\n output: true,\n }) ||\n config.decorate.some(\n d =>\n d.name === 'HideField' &&\n d.from === '@nestjs/graphql' &&\n d.isMatchField(field.name) &&\n d.isMatchType(outputTypeName),\n );\n\n const fieldType = settings?.getFieldType({\n name: outputTypeArg.name,\n output: true,\n });\n\n if (fieldType && isCustomsApplicable && !shouldHideField) {\n graphqlType = fieldType.name;\n importDeclarations.create({ ...fieldType });\n } else {\n const graphqlImport = getGraphqlImport({\n config,\n fileType,\n getSourceFile,\n isId: false,\n location,\n sourceFile,\n typeName: outputTypeName,\n });\n const referenceName =\n location === 'enumTypes' ? getEnumName(propertyType[0]) : propertyType[0];\n\n graphqlType = graphqlImport.name;\n\n if (\n graphqlImport.specifier &&\n !importDeclarations.has(graphqlImport.name) &&\n ((graphqlImport.name !== outputTypeArg.name && !shouldHideField) ||\n (shouldHideField && referenceName === graphqlImport.name))\n ) {\n importDeclarations.set(graphqlImport.name, {\n moduleSpecifier: graphqlImport.specifier,\n namedImports: [{ name: graphqlImport.name }],\n });\n }\n }\n\n ok(property.decorators, 'property.decorators is undefined');\n\n if (shouldHideField) {\n importDeclarations.add('HideField', nestjsGraphql);\n property.decorators.push({ arguments: [], name: 'HideField' });\n } else {\n // Generate `@Field()` decorator\n property.decorators.push({\n arguments: [\n isList ? `() => [${graphqlType}]` : `() => ${graphqlType}`,\n JSON5.stringify({\n ...settings?.fieldArguments(),\n nullable: Boolean(field.isNullable),\n }),\n ],\n name: 'Field',\n });\n\n if (isCustomsApplicable) {\n for (const options of settings ?? []) {\n if (\n (options.kind === 'Decorator' &&\n options.output &&\n options.match?.(field.name)) ??\n true\n ) {\n property.decorators.push({\n arguments: options.arguments as string[],\n name: options.name,\n });\n ok(options.from, \"Missed 'from' part in configuration or field setting\");\n importDeclarations.create(options);\n }\n }\n }\n }\n\n eventEmitter.emitSync('ClassProperty', property, {\n isList,\n location,\n propertyType,\n });\n }\n\n sourceFile.set({\n statements: [...importDeclarations.toStatements(), classStructure],\n });\n}\n","import { rmdirSync } from 'node:fs';\n\nimport type { EventArguments, EventEmitter } from '../types.js';\n\nexport function purgeOutput(emitter: EventEmitter): void {\n emitter.on('Begin', begin);\n emitter.on('End', end);\n}\n\nfunction begin({ project, output }: EventArguments): void {\n const sourceFiles = project.getDirectory(output)?.getDescendantSourceFiles();\n\n if (sourceFiles) {\n for (const sourceFile of sourceFiles) {\n sourceFile.delete();\n }\n }\n}\n\nfunction end({ project, output }: EventArguments): void {\n const directories = project\n .getDirectory(output)\n ?.getDescendantDirectories()\n .filter(directory => directory.getSourceFiles().length === 0)\n .map(directory => directory.getPath());\n\n for (const directory of directories ?? []) {\n try {\n rmdirSync(directory);\n } catch {\n // Ignore errors\n }\n }\n}\n","import {\n type Directory,\n type ExportDeclarationStructure,\n type SourceFile,\n StructureKind,\n} from 'ts-morph';\n\nimport type { EventArguments, EventEmitter } from '../types.js';\n\nexport enum ReExport {\n None = 'None',\n Directories = 'Directories',\n Single = 'Single',\n All = 'All',\n}\n\nexport function reExport(emitter: EventEmitter): void {\n emitter.on('BeforeGenerateFiles', beforeGenerateFiles);\n}\n\nfunction beforeGenerateFiles(args: EventArguments): void {\n const { project, output, config } = args;\n const rootDirectory = project.getDirectoryOrThrow(output);\n\n if ([ReExport.Directories, ReExport.All].includes(config.reExport)) {\n for (const directory of rootDirectory.getDescendantDirectories()) {\n let indexSourceFile: SourceFile | undefined;\n\n const exportDeclarations: ExportDeclarationStructure[] = directory\n .getSourceFiles()\n .filter(sourceFile => {\n return sourceFile.getBaseName() !== 'index.ts';\n })\n .map(sourcesFile => getExportDeclaration(directory, sourcesFile));\n\n if (exportDeclarations.length > 0) {\n indexSourceFile = directory.createSourceFile(\n 'index.ts',\n {\n statements: exportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n\n if (indexSourceFile) {\n continue;\n }\n\n const namespaceExportDeclarations: ExportDeclarationStructure[] = directory\n .getDirectories()\n .map(sourceDirectory =>\n getNamespaceExportDeclaration(directory, sourceDirectory),\n );\n\n project.createSourceFile(\n `${directory.getPath()}/index.ts`,\n {\n statements: namespaceExportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n }\n\n if (config.reExport === ReExport.Single) {\n const exportDeclarations: ExportDeclarationStructure[] = project\n .getSourceFiles()\n .filter(sourceFile => {\n return sourceFile.getBaseName() !== 'index.ts';\n })\n .map(sourceFile => getExportDeclaration(rootDirectory, sourceFile));\n rootDirectory.createSourceFile(\n 'index.ts',\n {\n statements: exportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n\n if (config.reExport === ReExport.All) {\n const exportDeclarations: ExportDeclarationStructure[] = [];\n for (const directory of rootDirectory.getDirectories()) {\n if (directory.getBaseName() === 'node_modules') continue;\n const sourceFile = directory.getSourceFileOrThrow('index.ts');\n exportDeclarations.push(getExportDeclaration(rootDirectory, sourceFile));\n }\n rootDirectory.createSourceFile(\n 'index.ts',\n {\n statements: exportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n}\n\nfunction getExportDeclaration(\n directory: Directory,\n sourceFile: SourceFile,\n): ExportDeclarationStructure {\n // For ESM, ensure module specifiers have .js extension\n let moduleSpecifier = directory.getRelativePathAsModuleSpecifierTo(sourceFile);\n if (!moduleSpecifier.endsWith('.js') && !moduleSpecifier.endsWith('.ts')) {\n moduleSpecifier = moduleSpecifier + '.js';\n } else if (moduleSpecifier.endsWith('.ts')) {\n moduleSpecifier = moduleSpecifier.slice(0, -3) + '.js';\n }\n\n return {\n kind: StructureKind.ExportDeclaration,\n namedExports: sourceFile.getExportSymbols().map(s => ({ name: s.getName() })),\n moduleSpecifier,\n };\n}\n\nfunction getNamespaceExportDeclaration(\n directory: Directory,\n sourceDirectory: Directory,\n): ExportDeclarationStructure {\n let moduleSpecifier = directory.getRelativePathAsModuleSpecifierTo(sourceDirectory);\n if (!moduleSpecifier.endsWith('/index.js')) {\n moduleSpecifier = moduleSpecifier + '/index.js';\n }\n\n return {\n kind: StructureKind.ExportDeclaration,\n moduleSpecifier,\n };\n}\n","type EnumValueDocInfo = { description: string } | { deprecationReason: string };\n\nexport function extractEnumValueDocs(\n values: readonly { name: string; [key: string]: unknown }[],\n): Record<string, EnumValueDocInfo> {\n return Object.fromEntries(\n values\n .map((value): [string, EnumValueDocInfo] | null => {\n const { name } = value;\n const documentation: unknown = value.documentation;\n\n if (typeof documentation !== 'string') return null;\n\n if (documentation.startsWith('@deprecated')) {\n return [name, { deprecationReason: documentation.slice(11).trim() }];\n }\n\n return [name, { description: documentation }];\n })\n .filter((entry): entry is [string, EnumValueDocInfo] => entry !== null),\n );\n}\n","import { type EnumDeclarationStructure, StructureKind } from 'ts-morph';\n\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport type { EventArguments, SchemaEnum } from '../types.js';\nimport { extractEnumValueDocs } from './prisma-enum-doc.js';\n\nexport function registerEnum(enumType: SchemaEnum, args: EventArguments): void {\n const { config, enums, getSourceFile } = args;\n\n if (!config.emitBlocks.prismaEnums && !enums[enumType.name]) return;\n\n const dataModelEnum = enums[enumType.name];\n const enumTypesData = dataModelEnum?.values ?? [];\n const sourceFile = getSourceFile({\n name: enumType.name,\n type: 'enum',\n });\n\n const importDeclarations = new ImportDeclarationMap();\n\n importDeclarations.set('registerEnumType', {\n moduleSpecifier: '@nestjs/graphql',\n namedImports: [{ name: 'registerEnumType' }],\n });\n\n // Extract valuesMap from enum documentation\n const valuesMap = extractEnumValueDocs(enumTypesData);\n\n // Remove entries with no description or deprecationReason\n const filteredValuesMap = Object.fromEntries(\n Object.entries(valuesMap).filter(([, v]) => Object.keys(v).length > 0),\n );\n\n // Format only if needed\n const hasValuesMap = Object.keys(filteredValuesMap).length > 0;\n const formattedValuesMap = hasValuesMap\n ? JSON.stringify(filteredValuesMap, null, 2).replace(/\"([^\"]+)\":/g, '$1:')\n : '';\n const valuesMapEntry = hasValuesMap ? `, valuesMap: ${formattedValuesMap}` : '';\n\n const enumStructure: EnumDeclarationStructure = {\n kind: StructureKind.Enum,\n isExported: true,\n name: enumType.name,\n members: enumType.values.map(v => ({\n name: v,\n initializer: JSON.stringify(v),\n })),\n };\n\n sourceFile.set({\n statements: [\n ...importDeclarations.toStatements(),\n enumStructure,\n '\\n',\n `registerEnumType(${enumType.name}, { name: '${enumType.name}', description: ${JSON.stringify(\n dataModelEnum?.documentation,\n )}${valuesMapEntry} })`,\n ],\n });\n}\n","import { StructureKind } from 'ts-morph';\n\nimport { relativePath } from '../helpers/relative-path.js';\nimport type { EventArguments } from '../types.js';\n\n/**\n * Generate the register-all-types.ts file that imports all generated types\n * to ensure their registerType() calls are executed.\n *\n * This file must be imported early in the application, before any code\n * tries to use getType() for lazy type resolution.\n *\n * This solves the ESM bundling issue where CJS would return valid bundles\n * but ESM complains about broken dependency cycles.\n */\nexport function generateRegisterAllTypes(args: EventArguments): void {\n const { config, output, project } = args;\n\n if (!config.esmCompatible) {\n return;\n }\n\n const rootDirectory = project.getDirectory(output) || project.createDirectory(output);\n const sourceFile = rootDirectory.createSourceFile(\n 'register-all-types.ts',\n undefined,\n { overwrite: true },\n );\n\n // Collect all generated source files that have registerType() calls\n const importPaths: string[] = [];\n const typeNames: string[] = [];\n\n // Get all source files in the output directory\n const allSourceFiles = project.getSourceFiles(`${output}/**/*.ts`);\n\n for (const file of allSourceFiles) {\n const filePath = file.getFilePath();\n\n // Skip utility files and the register file itself\n if (\n filePath.endsWith('type-registry.ts') ||\n filePath.endsWith('register-all-types.ts') ||\n filePath.endsWith('index.ts')\n ) {\n continue;\n }\n\n // Check if this file has a registerType() call\n const fileText = file.getText();\n const registerMatch = fileText.match(/registerType\\(['\"]([^'\"]+)['\"]/);\n if (registerMatch) {\n // Get relative path from register-all-types.ts to this file\n const relPath = relativePath(sourceFile.getFilePath(), filePath);\n importPaths.push(relPath);\n typeNames.push(registerMatch[1]);\n }\n }\n\n // Sort for consistent output\n importPaths.sort();\n typeNames.sort();\n\n // Generate the file content with proper ESM handling\n const fileContent = `/**\n * ESM Type Registration Module\n *\n * This file registers all generated types with the type registry to solve\n * ESM circular dependency issues. In ESM, unlike CommonJS, circular imports\n * can result in undefined values because modules are evaluated in a different order.\n *\n * IMPORTANT: Import this file at the very top of your application entry point,\n * BEFORE any other code that uses the generated types.\n *\n * Example usage in main.ts:\n *\n * // This MUST be the first import\n * import './@generated/register-all-types.js';\n *\n * // Now you can safely import and use generated types\n * import { NestFactory } from '@nestjs/core';\n * import { AppModule } from './app.module.js';\n *\n * Why this is needed:\n * - ESM uses \"live bindings\" where imports reference the actual export\n * - With circular deps (User -> Post -> User), one module isn't ready when imported\n * - CJS would give a partial object that fills in later; ESM gives undefined\n * - This registry pattern defers type resolution until runtime when all modules are loaded\n */\n\nimport { markRegistrationComplete } from './type-registry.js';\n\n// Import all generated type files to trigger their registerType() calls\n// These are side-effect imports that populate the type registry\n${importPaths.map(p => `import '${p}';`).join('\\n')}\n\n// Mark registration as complete to enable warning messages\nmarkRegistrationComplete();\n\n// Export type names for validation (optional)\nexport const registeredTypes = [\n${typeNames.map(n => ` '${n}',`).join('\\n')}\n] as const;\n\nexport type RegisteredTypeName = typeof registeredTypes[number];\n`;\n\n sourceFile.addStatements(fileContent);\n}\n","import { isWhereUniqueInputType } from '../helpers/is-where-unique-input-type.js';\nimport type { EventArguments, EventEmitter, InputType } from '../types.js';\n\nexport function requireSingleFieldsInWhereUniqueInput(eventEmitter: EventEmitter): void {\n eventEmitter.on('BeforeInputType', beforeInputType);\n}\n\nfunction beforeInputType(args: EventArguments & { inputType: InputType }): void {\n const { inputType } = args;\n\n if (!isWhereUniqueInputType(inputType.name) || inputType.fields.length !== 1) {\n return;\n }\n\n for (const field of inputType.fields) {\n field.isRequired = true;\n field.isNullable = false;\n }\n}\n","import { StructureKind } from 'ts-morph';\n\nimport type { EventArguments } from '../types.js';\n\n/**\n * Generate the type-registry.ts file that provides lazy type resolution\n * for circular dependencies in ESM environments.\n *\n * This solves the ESM bundling issue where CJS would return valid bundles\n * but ESM complains about broken dependency cycles. In ESM, circular imports\n * can result in undefined values because module evaluation order differs from CJS.\n *\n * The registry pattern defers type resolution until runtime when all modules\n * have been fully initialized.\n */\nexport function generateTypeRegistry(args: EventArguments): void {\n const { config, output, project } = args;\n\n if (!config.esmCompatible) {\n return;\n }\n\n const rootDirectory = project.getDirectory(output) || project.createDirectory(output);\n\n const sourceFile = rootDirectory.createSourceFile(\n 'type-registry.ts',\n undefined,\n { overwrite: true },\n );\n\n // Generate a comprehensive type registry with error handling and forwardRef support\n const registryCode = `/**\n * Type Registry for ESM Circular Dependency Resolution\n *\n * In ESM, circular dependencies behave differently than CommonJS:\n * - CJS: Modules get a partial/incomplete export object that gets filled in\n * - ESM: Imports are \"live bindings\" but can be undefined if not yet initialized\n *\n * This registry solves this by:\n * 1. Deferring type resolution until runtime (after all modules are loaded)\n * 2. Providing a forwardRef pattern for GraphQL field type declarations\n * 3. Validating all types are registered before they're needed\n */\n\nconst registry = new Map<string, unknown>();\nconst pendingResolutions = new Map<string, Array<(type: unknown) => void>>();\nlet registrationComplete = false;\n\n/**\n * Register a type with the registry.\n * This should be called at module load time after the class is defined.\n */\nexport function registerType(name: string, type: unknown): void {\n if (type === undefined) {\n console.warn(\\`[nestjs-prisma-graphql] Warning: Registering undefined type for \"\\${name}\". This may indicate a circular dependency issue.\\`);\n }\n registry.set(name, type);\n\n // Resolve any pending forwardRef callbacks\n const pending = pendingResolutions.get(name);\n if (pending) {\n for (const callback of pending) {\n callback(type);\n }\n pendingResolutions.delete(name);\n }\n}\n\n/**\n * Get a type from the registry.\n * Returns the type if registered, undefined otherwise.\n *\n * For use in \\\\@Field(() => getType('TypeName')) decorators.\n */\nexport function getType<T = unknown>(name: string): T {\n const type = registry.get(name);\n if (type === undefined && registrationComplete) {\n console.warn(\\`[nestjs-prisma-graphql] Warning: Type \"\\${name}\" not found in registry. Ensure register-all-types is imported before using generated types.\\`);\n }\n return type as T;\n}\n\n/**\n * Create a forward reference to a type that may not be registered yet.\n * This is useful for handling circular dependencies where type A references type B\n * and type B references type A.\n *\n * Usage: \\\\@Field(() => forwardRef('Post'))\n */\nexport function forwardRef<T = unknown>(name: string): () => T {\n return () => {\n const type = registry.get(name);\n if (type === undefined) {\n throw new Error(\n \\`[nestjs-prisma-graphql] Type \"\\${name}\" not registered. \\\\n\\` +\n \\`This usually means:\\\\n\\` +\n \\` 1. The register-all-types.ts file was not imported early enough\\\\n\\` +\n \\` 2. There's a circular dependency that couldn't be resolved\\\\n\\` +\n \\` 3. The type file failed to load\\\\n\\\\n\\` +\n \\`Make sure to import 'register-all-types' at the top of your main.ts or app.module.ts\\`\n );\n }\n return type as T;\n };\n}\n\n/**\n * Lazily resolve a type, returning a thunk that can be called later.\n * This is the safest pattern for circular references in ESM.\n *\n * Usage: \\\\@Field(lazyType('Post'))\n */\nexport function lazyType<T = unknown>(name: string): () => T {\n return () => getType<T>(name);\n}\n\n/**\n * Mark registration as complete. Called after all types are imported.\n * This enables warning messages for missing types.\n */\nexport function markRegistrationComplete(): void {\n registrationComplete = true;\n\n // Warn about any unresolved forward refs\n if (pendingResolutions.size > 0) {\n const missing = Array.from(pendingResolutions.keys()).join(', ');\n console.warn(\\`[nestjs-prisma-graphql] Warning: Unresolved forward references: \\${missing}\\`);\n }\n}\n\n/**\n * Get all registered type names (useful for debugging)\n */\nexport function getRegisteredTypes(): string[] {\n return Array.from(registry.keys());\n}\n\n/**\n * Check if a type is registered\n */\nexport function isTypeRegistered(name: string): boolean {\n return registry.has(name);\n}\n\n/**\n * Validate that all expected types are registered.\n * Throws an error if any types are missing.\n */\nexport function validateRegistry(expectedTypes: string[]): void {\n const missing = expectedTypes.filter(name => !registry.has(name));\n if (missing.length > 0) {\n throw new Error(\n \\`[nestjs-prisma-graphql] Missing type registrations: \\${missing.join(', ')}\\\\n\\` +\n \\`Ensure register-all-types.ts is imported before using these types.\\`\n );\n }\n}\n`;\n\n sourceFile.addStatements(registryCode);\n}\n","export function warning(message: string | string[]): void {\n if (Array.isArray(message)) {\n console.log('nestjs-prisma-graphql:');\n console.log(message.join('\\n'));\n } else {\n console.log('nestjs-prisma-graphql:', message);\n }\n}\n","type EmittedBlockType =\n | 'prismaEnums'\n | 'schemaEnums'\n | 'models'\n | 'inputs'\n | 'args'\n | 'outputs';\n\nexport type EmitBlocksOption = 'enums' | 'models' | 'inputs' | 'args' | 'outputs';\n\nconst allEmmittedBlocks: EmittedBlockType[] = [\n 'prismaEnums',\n 'schemaEnums',\n 'models',\n 'inputs',\n 'args',\n 'outputs',\n];\n\nconst blocksDependencyMap: Record<EmitBlocksOption, EmittedBlockType[]> = {\n enums: ['schemaEnums', 'prismaEnums'],\n models: ['models', 'schemaEnums'],\n inputs: ['inputs', 'prismaEnums'],\n outputs: ['outputs'],\n args: ['args', 'inputs', 'prismaEnums'],\n};\n\nexport function createEmitBlocks(data?: string[]): Record<EmittedBlockType, boolean> {\n if (!data) {\n return Object.fromEntries(allEmmittedBlocks.map(block => [block, true])) as Record<\n EmittedBlockType,\n boolean\n >;\n }\n\n let blocksToEmit = {} as Record<EmittedBlockType, boolean>;\n\n for (const block of data) {\n if (!Object.keys(blocksDependencyMap).includes(block)) continue;\n\n blocksToEmit = {\n ...blocksToEmit,\n ...Object.fromEntries(\n (blocksDependencyMap[block as EmitBlocksOption] as EmittedBlockType[]).map(block => [block, true]),\n ),\n };\n }\n\n return blocksToEmit;\n}\n","import { ok } from 'node:assert';\nimport { existsSync } from 'node:fs';\n\nimport filenamify from 'filenamify';\nimport { unflatten } from 'flat';\nimport JSON5 from 'json5';\nimport { memoize, merge, trim } from 'lodash-es';\nimport outmatch from 'outmatch';\n\ntype Dictionary<T = unknown> = Record<string, T>;\n\nimport { ReExport } from '../handlers/re-export.js';\nimport type { ImportNameSpec, ObjectSetting } from '../types.js';\nimport { createEmitBlocks, type EmitBlocksOption } from './create-emit-blocks.js';\n\ntype ConfigFieldSetting = Partial<Omit<ObjectSetting, 'name'>>;\ntype DecorateElement = {\n isMatchField: (s: string) => boolean;\n isMatchType: (s: string) => boolean;\n from: string;\n name: string;\n arguments?: string[];\n namedImport: boolean;\n defaultImport?: string | true;\n namespaceImport?: string;\n};\ntype CustomImport = {\n from: string;\n name: string;\n namedImport: boolean;\n defaultImport?: string | true;\n namespaceImport?: string;\n};\n\nexport function createConfig(data: Record<string, unknown>) {\n const config = merge({}, unflatten(data, { delimiter: '_' })) as Record<\n string,\n unknown\n >;\n const $warnings: string[] = [];\n\n const configOutputFilePattern = String(\n config.outputFilePattern || `{model}/{name}.{type}.ts`,\n );\n\n let outputFilePattern = filenamify(configOutputFilePattern, {\n replacement: '/',\n })\n .replaceAll('..', '/')\n .replaceAll(/\\/+/g, '/');\n outputFilePattern = trim(outputFilePattern, '/');\n\n if (outputFilePattern !== configOutputFilePattern) {\n $warnings.push(\n `Due to invalid filepath 'outputFilePattern' changed to '${outputFilePattern}'`,\n );\n }\n\n if (config.reExportAll) {\n $warnings.push(`Option 'reExportAll' is deprecated, use 'reExport' instead`);\n if (toBoolean(config.reExportAll)) {\n config.reExport = 'All';\n }\n }\n\n const fields: Record<string, ConfigFieldSetting | undefined> = Object.fromEntries(\n Object.entries<Dictionary<string | undefined>>(\n (config.fields ?? {}) as Record<string, Dictionary<string | undefined>>,\n )\n .filter(({ 1: value }) => typeof value === 'object')\n .map(([name, value]) => {\n const fieldSetting: ConfigFieldSetting = {\n arguments: [],\n output: toBoolean(value.output),\n input: toBoolean(value.input),\n model: toBoolean(value.model),\n from: value.from,\n defaultImport: toBoolean(value.defaultImport) ? true : value.defaultImport,\n namespaceImport: value.namespaceImport,\n };\n return [name, fieldSetting];\n }),\n );\n\n const decorate: DecorateElement[] = [];\n const configDecorate: (Record<string, string> | undefined)[] = Object.values(\n (config.decorate as Record<string, Record<string, string> | undefined>) || {},\n );\n\n for (const element of configDecorate) {\n if (!element) continue;\n ok(\n element.from && element.name,\n `Missed 'from' or 'name' part in configuration for decorate`,\n );\n decorate.push({\n isMatchField: outmatch(element.field, { separator: false }),\n isMatchType: outmatch(element.type, { separator: false }),\n from: element.from,\n name: element.name,\n namedImport: toBoolean(element.namedImport),\n defaultImport: toBoolean(element.defaultImport) ? true : element.defaultImport,\n namespaceImport: element.namespaceImport,\n arguments: element.arguments ? JSON5.parse(element.arguments) : undefined,\n });\n }\n\n const customImport: CustomImport[] = [];\n const configCustomImport: (Record<string, string> | undefined)[] = Object.values(\n (config.customImport as Record<string, Record<string, string> | undefined>) || {},\n );\n for (const element of configCustomImport) {\n if (!element) continue;\n ok(\n element.from && element.name,\n `Missed 'from' or 'name' part in configuration for customImport`,\n );\n customImport.push({\n from: element.from,\n name: element.name,\n namedImport: toBoolean(element.namedImport),\n defaultImport: toBoolean(element.defaultImport) ? true : element.defaultImport,\n namespaceImport: element.namespaceImport,\n });\n }\n return {\n outputFilePattern,\n tsConfigFilePath: createTsConfigFilePathValue(config.tsConfigFilePath),\n prismaClientImport: createPrismaImport(config.prismaClientImport),\n combineScalarFilters: toBoolean(config.combineScalarFilters),\n noAtomicOperations: toBoolean(config.noAtomicOperations),\n reExport: (ReExport[String(config.reExport) as keyof typeof ReExport] || ReExport.None) as ReExport,\n emitSingle: toBoolean(config.emitSingle),\n emitCompiled: toBoolean(config.emitCompiled),\n emitBlocks: createEmitBlocks(config.emitBlocks as EmitBlocksOption[]),\n omitModelsCount: toBoolean(config.omitModelsCount),\n $warnings,\n fields,\n purgeOutput: toBoolean(config.purgeOutput),\n useInputType: createUseInputType(config.useInputType as Record<string, ConfigInputItem>),\n noTypeId: toBoolean(config.noTypeId),\n requireSingleFieldsInWhereUniqueInput: toBoolean(\n config.requireSingleFieldsInWhereUniqueInput,\n ),\n unsafeCompatibleWhereUniqueInput: toBoolean(\n config.unsafeCompatibleWhereUniqueInput,\n ),\n graphqlScalars: (config.graphqlScalars || {}) as Record<\n string,\n ImportNameSpec | undefined\n >,\n decorate,\n customImport,\n esmCompatible: toBoolean(config.esmCompatible),\n };\n}\n\ntype ConfigInputItem = {\n typeName: string;\n ALL?: string;\n [index: string]: string | undefined;\n};\n\nconst tsConfigFileExists = memoize((filePath: string) => {\n return existsSync(filePath);\n});\n\nfunction createTsConfigFilePathValue(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n if (tsConfigFileExists('tsconfig.json')) return 'tsconfig.json';\n}\n\nfunction createPrismaImport(value: unknown): string {\n if (typeof value === 'string') return value;\n return '@prisma/client';\n}\n\nfunction createUseInputType(data?: Record<string, ConfigInputItem>) {\n if (!data) {\n return [];\n }\n const result: ConfigInputItem[] = [];\n for (const [typeName, useInputs] of Object.entries(data)) {\n const entry: ConfigInputItem = {\n typeName,\n ALL: undefined,\n };\n if (useInputs.ALL) {\n entry.ALL = useInputs.ALL;\n delete useInputs.ALL;\n }\n\n for (const [propertyName, pattern] of Object.entries(useInputs)) {\n entry[propertyName] = pattern;\n }\n\n result.push(entry);\n }\n return result;\n}\n\nfunction toBoolean(value: unknown) {\n return ['true', '1', 'on'].includes(String(value));\n}\n","import { kebabCase } from 'lodash-es';\nimport pluralize from 'pluralize';\nimport pupa from 'pupa';\n\nexport function generateFileName(args: {\n type: string;\n name: string;\n getModelName(name: string): string | undefined;\n template: string;\n}) {\n const { getModelName, name, template, type } = args;\n\n return pupa(template, {\n get model() {\n const result = getModelName(name) || 'prisma';\n return kebabCase(result);\n },\n get name() {\n let result = kebabCase(name);\n\n for (const suffix of ['input', 'args', 'enum']) {\n const ending = `-${suffix}`;\n if (type === suffix && result.endsWith(ending)) {\n result = result.slice(0, -ending.length);\n }\n }\n return result;\n },\n plural: {\n get type() {\n return pluralize(type);\n },\n },\n type,\n });\n}\n","import type { Project } from 'ts-morph';\n\nimport type { EventEmitter } from '../types.js';\nimport { generateFileName } from './generate-file-name.js';\n\nexport function factoryGetSourceFile(args: {\n output: string;\n outputFilePattern: string;\n project: Project;\n getModelName(name: string): string | undefined;\n eventEmitter: EventEmitter;\n}) {\n const { outputFilePattern, output, getModelName, project } = args;\n\n return function getSourceFile(args: { type: string; name: string }) {\n const { name, type } = args;\n let filePath = generateFileName({\n getModelName,\n name,\n type,\n template: outputFilePattern,\n });\n filePath = `${output}/${filePath}`;\n\n return (\n project.getSourceFile(filePath) ||\n project.createSourceFile(filePath, undefined, { overwrite: true })\n );\n };\n}\n","import { memoize } from 'lodash-es';\n\nexport function createGetModelName(\n modelNames: string[],\n): (name: string) => string | undefined {\n return memoize(tryGetName);\n\n function tryGetName(name: string): string | undefined {\n return getModelName({ modelNames, name });\n }\n}\n\nfunction getModelName(args: {\n name: string;\n modelNames: string[];\n}): string | undefined {\n const { modelNames, name } = args;\n for (const keyword of splitKeywords) {\n const [test] = name.split(keyword, 1);\n if (modelNames.includes(test)) {\n return test;\n }\n }\n for (const keyword of endsWithKeywords) {\n const [test] = name.split(keyword).slice(-1);\n if (modelNames.includes(test)) {\n return test;\n }\n }\n for (const [start, end] of middleKeywords) {\n let test = name.slice(start.length).slice(0, -end.length);\n if (modelNames.includes(test) && name.startsWith(start) && name.endsWith(end)) {\n return test;\n }\n test = name.slice(0, -(start + end).length);\n if (modelNames.includes(test) && name.endsWith(start + end)) {\n return test;\n }\n }\n\n // test for {Model}{UniqueName}CompoundUniqueInput\n if (name.slice(-19) === 'CompoundUniqueInput') {\n const test = name.slice(0, -19);\n const models = modelNames\n .filter(x => test.startsWith(x))\n .sort((a, b) => b.length - a.length);\n return models[0];\n }\n\n // test for {Model}Count\n if (name.slice(-5) === 'Count') {\n const test = name.slice(0, -5);\n if (modelNames.includes(test)) {\n return test;\n }\n }\n}\n\nconst splitKeywords = [\n 'CreateInput',\n 'CreateMany',\n 'CreateNested',\n 'CreateOneWithout',\n 'CreateOrConnect',\n 'CreateWithout',\n 'DistinctField',\n 'Filter',\n 'ManyWithout',\n 'OrderByInput',\n 'RelationFilter',\n 'NullableRelationFilter',\n 'ListRelationFilter',\n 'ScalarWhereInput',\n 'UpdateInput',\n 'UpdateMany',\n 'UpdateOneRequiredWithout',\n 'UpdateOneWithout',\n 'UpdateWith',\n 'UpsertWith',\n 'UpsertWithout',\n 'WhereInput',\n 'WhereUniqueInput',\n 'AvgAggregate',\n 'SumAggregate',\n 'MinAggregate',\n 'MaxAggregate',\n 'CountAggregate',\n 'ScalarField',\n 'GroupBy',\n 'OrderBy',\n 'UncheckedUpdate',\n 'UncheckedCreate',\n 'ScalarWhere',\n 'CountOutputType',\n 'CountOrderBy',\n 'SumOrderBy',\n 'MinOrderBy',\n 'MaxOrderBy',\n 'AvgOrderBy',\n 'Create',\n 'Update',\n 'ScalarRelationFilter',\n 'NullableScalarRelationFilter',\n].sort((a, b) => b.length - a.length);\n\nconst endsWithKeywords = [\n 'Aggregate',\n 'GroupBy',\n 'CreateOne',\n 'CreateMany',\n 'DeleteMany',\n 'DeleteOne',\n 'FindMany',\n 'FindOne',\n 'FindUnique',\n 'UpdateMany',\n 'UpdateOne',\n 'UpsertOne',\n];\n\nconst middleKeywords = [\n ['FindFirst', 'OrThrowArgs'],\n ['FindUnique', 'OrThrowArgs'],\n ['Aggregate', 'Args'],\n ['CreateOne', 'Args'],\n ['CreateMany', 'Args'],\n ['DeleteMany', 'Args'],\n ['DeleteOne', 'Args'],\n ['FindMany', 'Args'],\n ['FindFirst', 'Args'],\n ['FindOne', 'Args'],\n ['FindUnique', 'Args'],\n ['UpdateMany', 'Args'],\n ['UpdateMany', 'AndReturnOutputType'],\n ['UpdateOne', 'Args'],\n ['UpsertOne', 'Args'],\n ['GroupBy', 'Args'],\n ['OrderBy', 'Args'],\n];\n","import type { GeneratorOptions } from '@prisma/generator-helper';\nimport { ok } from 'node:assert';\nimport { mapKeys } from 'lodash-es';\nimport { Project, QuoteKind } from 'ts-morph';\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst AwaitEventEmitter = require('await-event-emitter').default;\n\nimport { argsType } from './handlers/args-type.js';\nimport { combineScalarFilters } from './handlers/combine-scalar-filters.js';\nimport { createAggregateInput } from './handlers/create-aggregate-input.js';\nimport { emitSingle } from './handlers/emit-single.js';\nimport { generateFiles } from './handlers/generate-files.js';\nimport { inputType } from './handlers/input-type.js';\nimport { modelData } from './handlers/model-data.js';\nimport { modelOutputType } from './handlers/model-output-type.js';\nimport { noAtomicOperations } from './handlers/no-atomic-operations.js';\nimport { outputType } from './handlers/output-type.js';\nimport { purgeOutput } from './handlers/purge-output.js';\nimport { ReExport, reExport } from './handlers/re-export.js';\nimport { registerEnum } from './handlers/register-enum.js';\nimport { generateRegisterAllTypes } from './handlers/register-all-types.js';\nimport { requireSingleFieldsInWhereUniqueInput } from './handlers/require-single-fields-in-whereunique-input.js';\nimport { generateTypeRegistry } from './handlers/type-registry.js';\nimport { warning } from './handlers/warning.js';\nimport { createConfig } from './helpers/create-config.js';\nimport {\n buildDependencyGraph,\n detectCircularDependencies,\n} from './helpers/detect-circular-deps.js';\nimport { factoryGetSourceFile } from './helpers/factory-get-source-file.js';\nimport { createGetModelName } from './helpers/get-model-name.js';\nimport type {\n Document,\n EventArguments,\n EventEmitter,\n Field,\n Model,\n ObjectSettings,\n OutputType,\n} from './types.js';\n\nexport async function generate(\n args: GeneratorOptions & {\n skipAddOutputSourceFiles?: boolean;\n connectCallback?: (\n emitter: EventEmitter,\n eventArguments: EventArguments,\n ) => void | Promise<void>;\n },\n) {\n const { connectCallback, dmmf, generator, skipAddOutputSourceFiles } = args;\n\n const generatorOutputValue = generator.output?.value;\n ok(generatorOutputValue, 'Missing generator configuration: output');\n\n const config = createConfig(generator.config);\n\n const eventEmitter = new AwaitEventEmitter() as EventEmitter;\n eventEmitter.on('Warning', warning);\n config.emitBlocks.models && eventEmitter.on('Model', modelData);\n if (config.emitBlocks.prismaEnums || config.emitBlocks.schemaEnums) {\n eventEmitter.on('EnumType', registerEnum);\n }\n if (\n config.emitBlocks.outputs ||\n (config.emitBlocks.models && !config.omitModelsCount)\n ) {\n eventEmitter.on('OutputType', outputType);\n }\n config.emitBlocks.models && eventEmitter.on('ModelOutputType', modelOutputType);\n config.emitBlocks.outputs && eventEmitter.on('AggregateOutput', createAggregateInput);\n config.emitBlocks.inputs && eventEmitter.on('InputType', inputType);\n config.emitBlocks.args && eventEmitter.on('ArgsType', argsType);\n eventEmitter.on('GenerateFiles', generateFiles);\n\n for (const message of config.$warnings) {\n eventEmitter.emitSync('Warning', message);\n }\n\n const project = new Project({\n manipulationSettings: {\n quoteKind: QuoteKind.Single,\n },\n skipAddingFilesFromTsConfig: true,\n skipLoadingLibFiles: !config.emitCompiled,\n tsConfigFilePath: config.tsConfigFilePath,\n });\n\n if (!skipAddOutputSourceFiles) {\n project.addSourceFilesAtPaths([\n `${generatorOutputValue}/**/*.ts`,\n `!${generatorOutputValue}/**/*.d.ts`,\n ]);\n }\n\n config.combineScalarFilters && combineScalarFilters(eventEmitter);\n config.noAtomicOperations && noAtomicOperations(eventEmitter);\n config.reExport !== ReExport.None && reExport(eventEmitter);\n config.emitSingle && emitSingle(eventEmitter);\n config.purgeOutput && purgeOutput(eventEmitter);\n config.requireSingleFieldsInWhereUniqueInput &&\n requireSingleFieldsInWhereUniqueInput(eventEmitter);\n\n const models = new Map<string, Model>();\n const modelNames: string[] = [];\n const modelFields = new Map<string, Map<string, Field>>();\n const fieldSettings = new Map<string, Map<string, ObjectSettings>>();\n const getModelName = createGetModelName(modelNames);\n const getSourceFile = factoryGetSourceFile({\n eventEmitter,\n getModelName,\n output: generatorOutputValue,\n outputFilePattern: config.outputFilePattern,\n project,\n });\n const { datamodel, schema } = JSON.parse(JSON.stringify(dmmf)) as Document;\n const removeTypes = new Set<string>();\n\n // Build circular dependency detection for ESM compatibility\n const allModels = [...datamodel.models, ...(datamodel.types ?? [])] as Model[];\n const dependencyGraph = buildDependencyGraph(allModels);\n const circularDependencies = detectCircularDependencies(dependencyGraph);\n\n const eventArguments: EventArguments = {\n circularDependencies,\n classTransformerTypeModels: new Set(),\n config,\n enums: mapKeys(datamodel.enums, x => x.name),\n eventEmitter,\n fieldSettings,\n getModelName,\n getSourceFile,\n modelFields,\n modelNames,\n models,\n output: generatorOutputValue,\n project,\n removeTypes,\n schema,\n typeNames: new Set<string>(),\n };\n\n if (connectCallback) {\n await connectCallback(eventEmitter, eventArguments);\n }\n\n await eventEmitter.emit('Begin', eventArguments);\n\n // Generate type registry file for ESM compatibility\n // Must be after 'Begin' event since purgeOutput deletes all files on Begin\n if (config.esmCompatible) {\n generateTypeRegistry(eventArguments);\n }\n\n for (const model of datamodel.models) {\n await eventEmitter.emit('Model', model, eventArguments);\n }\n\n // Types behaves like model\n for (const model of datamodel.types ?? []) {\n await eventEmitter.emit('Model', model, eventArguments);\n }\n\n const { enumTypes, inputObjectTypes, outputObjectTypes } = schema;\n\n await eventEmitter.emit('PostBegin', eventArguments);\n\n for (const enumType of enumTypes.prisma.concat(enumTypes.model ?? [])) {\n await eventEmitter.emit('EnumType', enumType, eventArguments);\n }\n\n for (const outputTypeItem of outputObjectTypes.model) {\n await eventEmitter.emit('ModelOutputType', outputTypeItem, eventArguments);\n }\n\n const queryOutputTypes: OutputType[] = [];\n\n for (const outputTypeItem of outputObjectTypes.prisma) {\n if (['Query', 'Mutation'].includes(outputTypeItem.name)) {\n queryOutputTypes.push(outputTypeItem);\n continue;\n }\n await eventEmitter.emit('OutputType', outputTypeItem, eventArguments);\n }\n\n const inputTypes = (inputObjectTypes.prisma ?? []).concat(inputObjectTypes.model ?? []);\n\n for (const inputTypeItem of inputTypes) {\n const event = {\n ...eventArguments,\n classDecoratorName: 'InputType',\n fileType: 'input',\n inputType: inputTypeItem,\n };\n if (inputTypeItem.fields.length === 0) {\n removeTypes.add(inputTypeItem.name);\n continue;\n }\n await eventEmitter.emit('BeforeInputType', event);\n await eventEmitter.emit('InputType', event);\n }\n\n for (const outputTypeItem of queryOutputTypes) {\n for (const field of outputTypeItem.fields) {\n await eventEmitter.emit('ArgsType', field, eventArguments);\n }\n }\n\n // Generate register-all-types.ts for ESM compatibility\n // Must be after all types are generated so it can find all files with registerType()\n if (config.esmCompatible) {\n generateRegisterAllTypes(eventArguments);\n }\n\n await eventEmitter.emit('BeforeGenerateFiles', eventArguments);\n await eventEmitter.emit('GenerateFiles', eventArguments);\n await eventEmitter.emit('End', eventArguments);\n\n for (const name of Object.keys((eventEmitter as unknown as { _events: Record<string, unknown> })._events)) {\n eventEmitter.off(name);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/helpers/is-many-and-return.ts","../src/helpers/pascal-case.ts","../src/handlers/args-type.ts","../src/event-names.ts","../src/handlers/combine-scalar-filters.ts","../src/handlers/create-aggregate-input.ts","../src/handlers/emit-single.ts","../src/helpers/import-declaration-map.ts","../src/handlers/generate-files.ts","../src/helpers/file-type-by-location.ts","../src/helpers/relative-path.ts","../src/helpers/get-graphql-import.ts","../src/helpers/get-graphql-input-type.ts","../src/helpers/get-property-type.ts","../src/helpers/get-where-unique-at-least-keys.ts","../src/helpers/is-where-unique-input-type.ts","../src/helpers/property-structure.ts","../src/handlers/input-type.ts","../src/helpers/object-settings.ts","../src/handlers/model-data.ts","../src/helpers/create-comment.ts","../src/helpers/detect-circular-deps.ts","../src/helpers/get-output-type-name.ts","../src/handlers/model-output-type.ts","../src/handlers/no-atomic-operations.ts","../src/helpers/get-enum-name.ts","../src/handlers/output-type.ts","../src/handlers/purge-output.ts","../src/handlers/re-export.ts","../src/handlers/prisma-enum-doc.ts","../src/handlers/register-enum.ts","../src/handlers/register-all-types.ts","../src/handlers/require-single-fields-in-whereunique-input.ts","../src/handlers/type-registry.ts","../src/handlers/warning.ts","../src/helpers/create-emit-blocks.ts","../src/helpers/create-config.ts","../src/helpers/generate-file-name.ts","../src/helpers/factory-get-source-file.ts","../src/helpers/get-model-name.ts","../src/generate.ts"],"names":["getModelName","inputType","outputType","StructureKind","outmatch","type","ok","JSON5","item","options","castArray","pupa","beforeInputType","nestjsGraphql","ReExport","beforeGenerateFiles","getExportDeclaration","block","merge","trim","args","memoize","end"],"mappings":"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","file":"generate.js","sourcesContent":["export function isManyAndReturnOutputType(name: string): boolean {\n const lowerName = name.toLowerCase();\n if (\n (lowerName.startsWith('createmany') || lowerName.startsWith('updatemany')) &&\n (lowerName.endsWith('andreturnoutputtype') || lowerName.endsWith('andreturn'))\n ) {\n return true;\n }\n\n return false;\n}\n","import { camelCase, startCase } from 'lodash-es';\n\nexport function pascalCase(string: string) {\n return startCase(camelCase(string)).replaceAll(' ', '');\n}\n","import { isManyAndReturnOutputType } from '../helpers/is-many-and-return.js';\nimport { pascalCase } from '../helpers/pascal-case.js';\nimport type { EventArguments, InputType, SchemaField } from '../types.js';\n\n/**\n * See https://github.com/prisma/prisma/blob/master/src/packages/client/src/generation/TSClient/Model.ts@getAggregationTypes\n * Subscribes on: 'ArgsType'\n */\nexport function argsType(field: SchemaField, args: EventArguments): void {\n if (['queryRaw', 'executeRaw'].includes(field.name)) {\n return;\n }\n if (isManyAndReturnOutputType(field.name)) return;\n\n const { eventEmitter, typeNames, getModelName } = args;\n let className = pascalCase(`${field.name}Args`);\n const modelName = getModelName(className) ?? '';\n\n switch (className) {\n case `Aggregate${modelName}Args`: {\n className = `${modelName}AggregateArgs`;\n break;\n }\n case `GroupBy${modelName}Args`: {\n className = `${modelName}GroupByArgs`;\n break;\n }\n }\n\n const inputType: InputType = {\n constraints: { maxNumFields: null, minNumFields: null },\n name: className,\n fields: [...field.args],\n };\n\n if (\n !field.args.some(x => x.name === '_count') &&\n [`${modelName}AggregateArgs`, `${modelName}GroupByArgs`].includes(className)\n ) {\n const names = ['Count', 'Avg', 'Sum', 'Min', 'Max'];\n if (`${modelName}GroupByArgs` === inputType.name) {\n // Make `by` property array only, noEnumerable\n const byField = inputType.fields.find(f => f.name === 'by');\n if (byField?.inputTypes) {\n byField.inputTypes = byField.inputTypes.filter(it => it.isList);\n }\n }\n for (const name of names) {\n if (!typeNames.has(`${modelName}${name}AggregateInput`)) {\n continue;\n }\n\n inputType.fields.push({\n name: `_${name.toLowerCase()}`,\n isRequired: false,\n isNullable: true,\n inputTypes: [\n {\n location: 'inputObjectTypes',\n type: `${modelName}${name}AggregateInput`,\n isList: false,\n },\n ],\n });\n }\n }\n\n eventEmitter.emitSync('InputType', {\n ...args,\n inputType,\n fileType: 'args',\n classDecoratorName: 'ArgsType',\n });\n}\n","export const BeforeGenerateField = 'BeforeGenerateField' as const;\n","import { cloneDeep, keyBy, remove } from 'lodash-es';\n\nimport { BeforeGenerateField } from '../event-names.js';\nimport type { EventArguments, EventEmitter, InputType, SchemaArg } from '../types.js';\n\n/**\n * Subscribes on 'BeforeInputType'\n */\nexport function combineScalarFilters(eventEmitter: EventEmitter): void {\n eventEmitter.on('BeforeInputType', beforeInputType);\n eventEmitter.on(BeforeGenerateField, beforeGenerateField);\n eventEmitter.on('PostBegin', postBegin);\n}\n\nfunction beforeInputType(\n args: EventArguments & {\n inputType: InputType;\n fileType: string;\n classDecoratorName: string;\n },\n): void {\n const { inputType, removeTypes } = args;\n\n if (isContainBogus(inputType.name) && isScalarFilter(inputType)) {\n removeTypes.add(inputType.name);\n inputType.name = replaceBogus(inputType.name);\n }\n}\n\nfunction beforeGenerateField(field: SchemaArg): void {\n for (const fieldInput of field.inputTypes) {\n if (fieldInput.location !== 'inputObjectTypes') {\n continue;\n }\n const fieldInputType = String(fieldInput.type);\n if (isContainBogus(fieldInputType)) {\n fieldInput.type = replaceBogus(fieldInputType);\n }\n }\n}\n\nfunction replaceBogus(name: string): string {\n return name.replaceAll(/Nullable|Nested/g, '');\n}\n\nfunction isContainBogus(name: string): boolean {\n return (\n name.startsWith('Nested') ||\n (name.includes('Nullable') && name.endsWith('Filter')) ||\n name.endsWith('NullableFilter')\n );\n}\n\nfunction isScalarFilter(inputType: InputType): boolean {\n if (!inputType.name.endsWith('Filter')) {\n return false;\n }\n let result = false;\n const equals = inputType.fields.find(f => f.name === 'equals');\n if (equals) {\n result = equals.inputTypes.every(x => {\n return ['enumTypes', 'scalar'].includes(x.location);\n });\n }\n return result;\n}\n\nfunction postBegin(args: EventArguments): void {\n const { modelNames, schema } = args;\n const inputTypes = schema.inputObjectTypes.prisma ?? [];\n const enumTypes = schema.enumTypes.model ?? [];\n const types = [\n 'Bool',\n 'Int',\n 'String',\n 'DateTime',\n 'Decimal',\n 'Float',\n 'Json',\n 'Bytes',\n 'BigInt',\n ];\n\n for (const enumType of enumTypes) {\n const { name } = enumType;\n types.push(`Enum${name}`);\n }\n\n const inputTypeByName = keyBy(inputTypes, it => it.name);\n const replaceBogusFilters = (filterName: string, filterNameCandidates: string[]): void => {\n for (const filterNameCandidate of filterNameCandidates) {\n const candidate = inputTypeByName[filterNameCandidate];\n if (candidate as InputType | undefined) {\n const it = cloneDeep({ ...candidate, name: filterName });\n inputTypes.push(it);\n inputTypeByName[filterName] = it;\n break;\n }\n }\n };\n\n for (const type of types) {\n // Scalar filters\n replaceBogusFilters(`${type}Filter`, [\n `${type}NullableFilter`,\n `Nested${type}NullableFilter`,\n ]);\n\n replaceBogusFilters(`${type}WithAggregatesFilter`, [\n `${type}NullableWithAggregatesFilter`,\n `Nested${type}NullableWithAggregatesFilter`,\n ]);\n\n replaceBogusFilters(`${type}ListFilter`, [\n `${type}NullableListFilter`,\n `Nested${type}NullableListFilter`,\n ]);\n }\n\n for (const modelName of modelNames) {\n replaceBogusFilters(`${modelName}RelationFilter`, [\n `${modelName}NullableRelationFilter`,\n ]);\n }\n\n for (const modelName of modelNames) {\n replaceBogusFilters(`${modelName}ScalarRelationFilter`, [\n `${modelName}NullableScalarRelationFilter`,\n ]);\n }\n\n remove(inputTypes, it => {\n return isContainBogus(it.name);\n });\n}\n","import type { EventArguments, InputType, OutputType } from '../types.js';\n\n/**\n * Create aggregate inputs from aggregate outputs.\n * See client/src/generation/TSClient.ts @ getAggregationTypes\n * Subscribes on: 'AggregateOutput'\n */\nexport function createAggregateInput(\n args: EventArguments & { outputType: OutputType },\n): void {\n const { eventEmitter, outputType } = args;\n const className = `${outputType.name}Input`;\n\n const inputType: InputType = {\n constraints: { maxNumFields: null, minNumFields: null },\n name: className,\n fields: outputType.fields.map(x => ({\n name: x.name,\n isNullable: x.isNullable ?? true,\n isRequired: false,\n inputTypes: [\n {\n isList: false,\n type: 'true',\n location: 'scalar',\n },\n ],\n })),\n };\n\n eventEmitter.emitSync('InputType', {\n ...args,\n inputType,\n fileType: 'input',\n classDecoratorName: 'InputType',\n });\n}\n","import { partition } from 'lodash-es';\nimport type { PropertyDeclarationStructure } from 'ts-morph';\n\nimport type { DMMF, EventEmitter } from '../types.js';\n\nexport function emitSingle(emitter: EventEmitter): void {\n emitter.on('ClassProperty', classProperty);\n}\n\nfunction classProperty(\n property: PropertyDeclarationStructure,\n eventArguments: {\n location: DMMF.FieldLocation;\n isList: boolean;\n propertyType: string[];\n },\n): void {\n const { location, isList, propertyType } = eventArguments;\n if (['inputObjectTypes', 'outputObjectTypes'].includes(location) && !isList) {\n const [safeTypes, instanceofTypes] = partition(\n propertyType,\n t => t === 'null' || t.startsWith('Prisma.'),\n );\n const mappedInstanceofTypes = instanceofTypes.map(t => `InstanceType<typeof ${t}>`);\n\n property.type = [...mappedInstanceofTypes, ...safeTypes].join(' | ');\n }\n}\n","import {\n type ImportDeclarationStructure,\n type ImportSpecifierStructure,\n type OptionalKind,\n StructureKind,\n} from 'ts-morph';\n\nexport class ImportDeclarationMap extends Map<\n string,\n OptionalKind<ImportDeclarationStructure>\n> {\n add(name: string, moduleSpecifier: string, isTypeOnly?: boolean): void;\n add(name: string, value: OptionalKind<ImportDeclarationStructure>): void;\n\n add(\n name: string,\n value: OptionalKind<ImportDeclarationStructure> | string,\n isTypeOnly?: boolean,\n ): void {\n if (!this.has(name)) {\n const structure: OptionalKind<ImportDeclarationStructure> =\n typeof value === 'string'\n ? { moduleSpecifier: value, namedImports: [{ name }], isTypeOnly }\n : value;\n this.set(name, structure);\n }\n }\n\n /**\n * Add a type-only import for ESM circular dependency resolution\n */\n addType(name: string, moduleSpecifier: string): void {\n const typeOnlyKey = `type:${name}`;\n if (!this.has(typeOnlyKey) && !this.has(name)) {\n this.set(typeOnlyKey, {\n moduleSpecifier,\n namedImports: [{ name }],\n isTypeOnly: true,\n });\n }\n }\n\n create(args: {\n name: string;\n from: string;\n defaultImport?: string | true;\n namespaceImport?: string;\n namedImport?: boolean;\n isTypeOnly?: boolean;\n }) {\n const { from, defaultImport, namespaceImport, namedImport, isTypeOnly } = args;\n let name = args.name;\n const value: OptionalKind<ImportDeclarationStructure> = {\n moduleSpecifier: from,\n namedImports: [] as OptionalKind<ImportSpecifierStructure>[],\n defaultImport: undefined as string | undefined,\n namespaceImport: undefined as string | undefined,\n isTypeOnly,\n };\n if (namedImport === true && namespaceImport) {\n value.namedImports = [{ name: namespaceImport }];\n name = namespaceImport;\n } else if (defaultImport) {\n value.defaultImport = defaultImport === true ? name : defaultImport;\n name = value.defaultImport;\n } else if (namespaceImport) {\n value.namespaceImport = namespaceImport;\n name = namespaceImport;\n } else {\n value.namedImports = [{ name }];\n }\n const key = isTypeOnly ? `type:${name}` : name;\n if (!this.has(key)) {\n this.set(key, value);\n }\n }\n\n *toStatements(): Iterable<ImportDeclarationStructure> {\n const iterator = this.values();\n let result = iterator.next();\n while (result.value) {\n yield {\n ...result.value,\n kind: StructureKind.ImportDeclaration,\n };\n result = iterator.next();\n }\n }\n}\n","import { ok } from 'node:assert';\nimport {\n type ClassDeclarationStructure,\n type ImportSpecifierStructure,\n type StatementStructures,\n StructureKind,\n} from 'ts-morph';\n\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport type { EventArguments } from '../types.js';\n\nexport async function generateFiles(args: EventArguments): Promise<void> {\n const { config, eventEmitter, output, project } = args;\n\n if (config.emitSingle) {\n const rootDirectory =\n project.getDirectory(output) ?? project.createDirectory(output);\n const sourceFile =\n rootDirectory.getSourceFile('index.ts') ??\n rootDirectory.createSourceFile('index.ts', undefined, { overwrite: true });\n const statements = project.getSourceFiles().flatMap(s => {\n if (s === sourceFile) {\n return [];\n }\n const classDeclaration = s.getClass(() => true);\n const stmts = s.getStructure().statements;\n // Reget decorator full name\n if (Array.isArray(stmts)) {\n for (const statement of stmts) {\n if (\n !(typeof statement === 'object' && statement.kind === StructureKind.Class)\n ) {\n continue;\n }\n for (const property of statement.properties ?? []) {\n for (const decorator of property.decorators ?? []) {\n const fullName = classDeclaration\n ?.getProperty(property.name)\n ?.getDecorator(decorator.name)\n ?.getFullName();\n ok(\n fullName,\n `Cannot get full name of decorator of class ${statement.name!}`,\n );\n decorator.name = fullName;\n }\n }\n }\n }\n\n project.removeSourceFile(s);\n return stmts;\n });\n const imports = new ImportDeclarationMap();\n const enums: (StatementStructures | string)[] = [];\n const classes: ClassDeclarationStructure[] = [];\n for (const statement of statements as (StatementStructures | string)[]) {\n if (typeof statement === 'string') {\n if (statement.startsWith('registerEnumType')) {\n enums.push(statement);\n }\n continue;\n }\n switch (statement.kind) {\n case StructureKind.ImportDeclaration: {\n if (\n statement.moduleSpecifier.startsWith('./') ||\n statement.moduleSpecifier.startsWith('..')\n ) {\n continue;\n }\n for (const namedImport of statement.namedImports as ImportSpecifierStructure[]) {\n const name = namedImport.alias ?? namedImport.name;\n imports.add(name, statement.moduleSpecifier);\n }\n if (statement.defaultImport) {\n imports.create({\n defaultImport: statement.defaultImport,\n from: statement.moduleSpecifier,\n name: statement.defaultImport,\n });\n }\n if (statement.namespaceImport) {\n imports.create({\n from: statement.moduleSpecifier,\n name: statement.namespaceImport,\n namespaceImport: statement.namespaceImport,\n });\n }\n break;\n }\n case StructureKind.Enum: {\n enums.unshift(statement);\n break;\n }\n case StructureKind.Class: {\n classes.push(statement);\n break;\n }\n }\n }\n for (const customImport of config.customImport) {\n imports.create(customImport);\n }\n sourceFile.set({\n kind: StructureKind.SourceFile,\n statements: [...imports.toStatements(), ...enums, ...classes],\n });\n }\n\n if (config.emitCompiled) {\n project.compilerOptions.set({\n declaration: true,\n declarationDir: output,\n emitDecoratorMetadata: false,\n outDir: output,\n rootDir: output,\n skipLibCheck: true,\n });\n const emitResult = await project.emit();\n const errors = emitResult.getDiagnostics().map(d => String(d.getMessageText()));\n if (errors.length > 0) {\n eventEmitter.emitSync('Warning', errors);\n }\n } else {\n await project.save();\n }\n}\n","import type { FieldLocation } from '../types.js';\n\nexport function fileTypeByLocation(fieldLocation: FieldLocation) {\n switch (fieldLocation) {\n case 'inputObjectTypes': {\n return 'input';\n }\n case 'outputObjectTypes': {\n return 'output';\n }\n case 'enumTypes': {\n return 'enum';\n }\n }\n return 'object';\n}\n","import getRelativePath from 'get-relative-path';\n\nexport function relativePath(from: string, to: string) {\n if (!from.startsWith('/')) {\n from = `/${from}`;\n }\n if (!to.startsWith('/')) {\n to = `/${to}`;\n }\n let result = getRelativePath(from, to);\n if (!result.startsWith('.')) {\n result = `./${result}`;\n }\n if (result.endsWith('.ts')) {\n result = result.slice(0, -3);\n }\n return result;\n}\n","import type { SourceFile } from 'ts-morph';\n\nimport type { FieldLocation, GeneratorConfiguration } from '../types.js';\nimport { fileTypeByLocation } from './file-type-by-location.js';\nimport { relativePath } from './relative-path.js';\n\nexport function getGraphqlImport(args: {\n sourceFile: SourceFile;\n typeName: string;\n location: FieldLocation;\n isId?: boolean;\n fileType?: string;\n noTypeId?: boolean;\n getSourceFile(args: { type: string; name: string }): SourceFile;\n config: GeneratorConfiguration;\n}): { name: string; specifier?: string } {\n const {\n config,\n fileType,\n getSourceFile,\n isId,\n location,\n noTypeId,\n sourceFile,\n typeName,\n } = args;\n\n if (location === 'scalar') {\n if (isId && !noTypeId) {\n return { name: 'ID', specifier: '@nestjs/graphql' };\n }\n\n const graphqlType = config.graphqlScalars[typeName];\n if (graphqlType) {\n return { name: graphqlType.name, specifier: graphqlType.specifier };\n }\n\n switch (typeName) {\n case 'Float':\n case 'Int': {\n return { name: typeName, specifier: '@nestjs/graphql' };\n }\n case 'DateTime': {\n return { name: 'Date', specifier: undefined };\n }\n case 'true':\n case 'Boolean': {\n return { name: 'Boolean', specifier: undefined };\n }\n case 'Decimal': {\n return {\n name: 'GraphQLDecimal',\n specifier: 'prisma-graphql-type-decimal',\n };\n }\n case 'Json': {\n return { name: 'GraphQLJSON', specifier: 'graphql-type-json' };\n }\n }\n\n return { name: 'String', specifier: undefined };\n }\n\n let sourceFileType = fileTypeByLocation(location);\n if (sourceFileType === 'output' && fileType === 'model') {\n sourceFileType = 'model';\n }\n\n const specifier = relativePath(\n sourceFile.getFilePath(),\n getSourceFile({\n name: typeName,\n type: sourceFileType,\n }).getFilePath(),\n );\n\n return { name: typeName, specifier };\n}\n","import { countBy, isEqual, uniqWith } from 'lodash-es';\nimport outmatch from 'outmatch';\n\nimport type { DMMF } from '../types.js';\n\n/**\n * Find input type for graphql field decorator.\n */\nexport function getGraphqlInputType(inputTypes: DMMF.InputTypeRef[], pattern?: string) {\n let result: DMMF.InputTypeRef | undefined;\n\n inputTypes = inputTypes.filter(t => !['null', 'Null'].includes(String(t.type)));\n inputTypes = uniqWith(inputTypes, isEqual);\n\n if (inputTypes.length === 1) {\n return inputTypes[0];\n }\n\n const countTypes = countBy(inputTypes, x => x.location);\n const isOneType = Object.keys(countTypes).length === 1;\n\n if (isOneType) {\n result = inputTypes.find(x => x.isList);\n if (result) {\n return result;\n }\n }\n\n if (pattern) {\n if (pattern.startsWith('matcher:') || pattern.startsWith('match:')) {\n const { 1: patternValue } = pattern.split(':', 2);\n const isMatch = outmatch(patternValue, { separator: false });\n result = inputTypes.find(x => isMatch(String(x.type)));\n if (result) {\n return result;\n }\n }\n result = inputTypes.find(x => String(x.type).includes(pattern));\n if (result) {\n return result;\n }\n }\n\n result = inputTypes.find(x => x.location === 'inputObjectTypes');\n if (result) {\n return result;\n }\n\n if (\n countTypes.enumTypes &&\n countTypes.scalar &&\n inputTypes.some(x => x.type === 'Json' && x.location === 'scalar')\n ) {\n result = inputTypes.find(x => x.type === 'Json' && x.location === 'scalar');\n if (result) {\n return result;\n }\n }\n\n if (\n (countTypes.scalar >= 1 || countTypes.enumTypes >= 1) &&\n countTypes.fieldRefTypes === 1\n ) {\n result = inputTypes.find(\n x => (x.location === 'scalar' || x.location === 'enumTypes') && x.isList,\n );\n\n if (result) {\n return result;\n }\n\n result = inputTypes.find(\n x => x.location === 'scalar' || x.location === 'enumTypes',\n );\n\n if (result) {\n return result;\n }\n }\n\n throw new TypeError(\n `Cannot get matching input type from ${\n inputTypes.map(x => x.type).join(', ') || 'zero length inputTypes'\n }`,\n );\n}\n","import type { FieldLocation } from '../types.js';\n\n/**\n * Returns typescript property type.\n */\nexport function getPropertyType(args: {\n type: string;\n location: FieldLocation;\n}): string[] {\n const { location, type } = args;\n switch (type) {\n case 'Float':\n case 'Int': {\n return ['number'];\n }\n case 'String': {\n return ['string'];\n }\n case 'Boolean': {\n return ['boolean'];\n }\n case 'DateTime': {\n return ['Date', 'string'];\n }\n case 'Decimal': {\n return ['Decimal'];\n }\n case 'Json': {\n return ['any'];\n }\n case 'Null': {\n return ['null'];\n }\n case 'Bytes': {\n return ['Uint8Array'];\n }\n case 'BigInt': {\n return ['bigint', 'number'];\n }\n }\n if (['inputObjectTypes', 'outputObjectTypes'].includes(location)) {\n return [type];\n }\n if (location === 'enumTypes') {\n const enumType = '`${' + type + '}`';\n\n return [enumType];\n }\n if (location === 'scalar') {\n return [type];\n }\n\n return ['unknown'];\n}\n","import type { DMMF } from '../types.js';\n\nexport function getWhereUniqueAtLeastKeys(model: DMMF.Model) {\n const names = model.fields\n .filter(field => field.isUnique || field.isId)\n .map(field => field.name);\n\n if (model.primaryKey) {\n names.push(createFieldName(model.primaryKey));\n }\n\n for (const uniqueIndex of model.uniqueIndexes) {\n names.push(createFieldName(uniqueIndex));\n }\n\n return names;\n}\n\nfunction createFieldName(args: { name?: string | null; fields: Readonly<string[]> }) {\n const { name, fields } = args;\n\n return name || fields.join('_');\n}\n","export function isWhereUniqueInputType(name: string) {\n return name.endsWith('WhereUniqueInput');\n}\n","import { type PropertyDeclarationStructure, StructureKind } from 'ts-morph';\n\n/**\n * Get property structure (field) for class.\n */\nexport function propertyStructure(args: {\n propertyType: string[];\n isList: boolean;\n name: string;\n isNullable?: boolean;\n hasQuestionToken?: boolean;\n hasExclamationToken?: boolean;\n}): PropertyDeclarationStructure {\n const {\n isNullable,\n propertyType,\n name,\n isList,\n hasQuestionToken,\n hasExclamationToken,\n } = args;\n const type = propertyType.map(type => (isList ? `Array<${type}>` : type)).join(' | ');\n\n return {\n kind: StructureKind.Property,\n name,\n type,\n hasQuestionToken: hasQuestionToken ?? isNullable,\n hasExclamationToken: hasExclamationToken ?? !isNullable,\n decorators: [],\n leadingTrivia: '\\n',\n };\n}\n","import { ok } from 'node:assert';\nimport JSON5 from 'json5';\nimport { castArray } from 'lodash-es';\nimport pupa from 'pupa';\nimport { type ClassDeclarationStructure, type StatementStructures, StructureKind } from 'ts-morph';\n\nimport { BeforeGenerateField } from '../event-names.js';\nimport { getGraphqlImport } from '../helpers/get-graphql-import.js';\nimport { getGraphqlInputType } from '../helpers/get-graphql-input-type.js';\nimport { getPropertyType } from '../helpers/get-property-type.js';\nimport { getWhereUniqueAtLeastKeys } from '../helpers/get-where-unique-at-least-keys.js';\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport { isWhereUniqueInputType } from '../helpers/is-where-unique-input-type.js';\nimport { propertyStructure } from '../helpers/property-structure.js';\nimport { relativePath } from '../helpers/relative-path.js';\nimport type { EventArguments, InputType } from '../types.js';\n\nexport function inputType(\n args: EventArguments & {\n inputType: InputType;\n fileType: string;\n classDecoratorName: string;\n },\n): void {\n const {\n circularDependencies,\n classDecoratorName,\n classTransformerTypeModels,\n config,\n eventEmitter,\n fieldSettings,\n fileType,\n getModelName,\n getSourceFile,\n inputType,\n models,\n output,\n removeTypes,\n typeNames,\n } = args;\n\n typeNames.add(inputType.name);\n\n const importDeclarations = new ImportDeclarationMap();\n const sourceFile = getSourceFile({\n name: inputType.name,\n type: fileType,\n });\n const classStructure: ClassDeclarationStructure = {\n kind: StructureKind.Class,\n isExported: true,\n name: inputType.name,\n decorators: [\n {\n name: classDecoratorName,\n arguments: [],\n },\n ],\n properties: [],\n };\n const modelName = getModelName(inputType.name) ?? '';\n const model = models.get(modelName);\n const modelFieldSettings = model && fieldSettings.get(model.name);\n const moduleSpecifier = '@nestjs/graphql';\n\n // Track types that need lazy loading due to circular dependencies\n const lazyTypes = new Set<string>();\n\n importDeclarations\n .set('Field', {\n namedImports: [{ name: 'Field' }],\n moduleSpecifier,\n })\n .set(classDecoratorName, {\n namedImports: [{ name: classDecoratorName }],\n moduleSpecifier,\n });\n\n // Add type registry imports if ESM compatible mode is enabled\n if (config.esmCompatible) {\n const typeRegistryPath = relativePath(\n sourceFile.getFilePath(),\n `${output}/type-registry.ts`,\n );\n importDeclarations.add('registerType', typeRegistryPath);\n importDeclarations.add('getType', typeRegistryPath);\n }\n\n const useInputType = config.useInputType.find(x =>\n inputType.name.includes(x.typeName),\n );\n const isWhereUnique = isWhereUniqueInputType(inputType.name);\n\n for (const field of inputType.fields) {\n field.inputTypes = field.inputTypes.filter(t => !removeTypes.has(String(t.type)));\n\n eventEmitter.emitSync(BeforeGenerateField, field, args);\n\n const { inputTypes, isRequired, name } = field;\n\n if (inputTypes.length === 0) {\n continue;\n }\n\n const usePattern = useInputType?.ALL ?? useInputType?.[name];\n const graphqlInputType = getGraphqlInputType(inputTypes, usePattern);\n const { isList, location, type } = graphqlInputType;\n const typeName = String(type);\n const settings = modelFieldSettings?.get(name);\n const propertySettings = settings?.getPropertyType({\n name: inputType.name,\n input: true,\n });\n const modelField = model?.fields.find(f => f.name === name);\n const isCustomsApplicable = typeName === modelField?.type;\n const atLeastKeys = model && getWhereUniqueAtLeastKeys(model);\n const whereUniqueInputTypeValue =\n isWhereUniqueInputType(typeName) &&\n atLeastKeys &&\n `Prisma.AtLeast<${typeName}, ${atLeastKeys\n .map(n => `'${n}'`)\n .join(' | ')}>`;\n\n const propertyType = castArray(\n propertySettings?.name ??\n (whereUniqueInputTypeValue ||\n getPropertyType({\n location,\n type: typeName,\n })),\n );\n\n const hasExclamationToken = Boolean(\n isWhereUnique &&\n config.unsafeCompatibleWhereUniqueInput &&\n atLeastKeys?.includes(name),\n );\n const property = propertyStructure({\n name,\n isNullable: !isRequired,\n hasExclamationToken: hasExclamationToken || undefined,\n hasQuestionToken: hasExclamationToken ? false : undefined,\n propertyType,\n isList,\n });\n\n classStructure.properties!.push(property);\n\n if (propertySettings) {\n importDeclarations.create({ ...propertySettings });\n } else if (propertyType.includes('Decimal')) {\n importDeclarations.add('Decimal', `${config.prismaClientImport}/../internal/prismaNamespace`);\n } else if (propertyType.some(p => p.startsWith('Prisma.'))) {\n importDeclarations.add('Prisma', config.prismaClientImport);\n }\n\n // Get graphql type\n let graphqlType: string;\n let useGetType = false;\n const shouldHideField =\n settings?.shouldHideField({\n name: inputType.name,\n input: true,\n }) ||\n config.decorate.some(\n d =>\n d.name === 'HideField' &&\n d.from === moduleSpecifier &&\n d.isMatchField(name) &&\n d.isMatchType(inputType.name),\n );\n\n const fieldType = settings?.getFieldType({\n name: inputType.name,\n input: true,\n });\n\n if (fieldType && isCustomsApplicable && !shouldHideField) {\n graphqlType = fieldType.name;\n importDeclarations.create({ ...fieldType });\n } else {\n // Import property type class\n const graphqlImport = getGraphqlImport({\n config,\n sourceFile,\n location,\n typeName,\n getSourceFile,\n });\n\n graphqlType = graphqlImport.name;\n let referenceName = propertyType[0];\n if (location === 'enumTypes') {\n const parts = referenceName.split(' ');\n referenceName = parts.at(-1) ?? parts[0];\n }\n\n // In ESM mode, always use getType() for input object types\n const shouldUseLazyType =\n config.esmCompatible && location === 'inputObjectTypes';\n\n // Handle self-references\n if (graphqlImport.name === inputType.name && shouldUseLazyType) {\n lazyTypes.add(graphqlImport.name);\n useGetType = true;\n } else if (\n graphqlImport.specifier &&\n !importDeclarations.has(graphqlImport.name) &&\n graphqlImport.name !== inputType.name\n ) {\n if (shouldUseLazyType) {\n importDeclarations.addType(graphqlImport.name, graphqlImport.specifier);\n lazyTypes.add(graphqlImport.name);\n } else {\n importDeclarations.set(graphqlImport.name, {\n namedImports: [{ name: graphqlImport.name }],\n moduleSpecifier: graphqlImport.specifier,\n });\n }\n }\n\n // Check if this type should use lazy loading\n if (lazyTypes.has(graphqlImport.name)) {\n useGetType = true;\n }\n }\n\n ok(property.decorators, 'property.decorators is undefined');\n\n if (shouldHideField) {\n importDeclarations.add('HideField', moduleSpecifier);\n property.decorators.push({ name: 'HideField', arguments: [] });\n } else {\n let typeExpression: string;\n if (useGetType) {\n typeExpression = isList\n ? `() => [getType('${graphqlType}')]`\n : `() => getType('${graphqlType}')`;\n } else {\n typeExpression = isList ? `() => [${graphqlType}]` : `() => ${graphqlType}`;\n }\n\n property.decorators.push({\n name: 'Field',\n arguments: [\n typeExpression,\n JSON5.stringify({\n ...settings?.fieldArguments(),\n nullable: !isRequired,\n }),\n ],\n });\n\n if (graphqlType === 'GraphQLDecimal') {\n importDeclarations.add('transformToDecimal', 'prisma-graphql-type-decimal');\n importDeclarations.add('Transform', 'class-transformer');\n importDeclarations.add('Type', 'class-transformer');\n\n property.decorators.push(\n {\n name: 'Type',\n arguments: ['() => Object'],\n },\n {\n name: 'Transform',\n arguments: ['transformToDecimal'],\n },\n );\n } else if (\n location === 'inputObjectTypes' &&\n (modelField?.type === 'Decimal' ||\n [\n 'connect',\n 'connectOrCreate',\n 'create',\n 'createMany',\n 'data',\n 'delete',\n 'deleteMany',\n 'disconnect',\n 'set',\n 'update',\n 'updateMany',\n 'upsert',\n 'where',\n ].includes(name) ||\n classTransformerTypeModels.has(getModelName(graphqlType) ?? '') ||\n (modelField?.kind === 'object' &&\n models.get(modelField.type) &&\n models\n .get(modelField.type)\n ?.fields.some(\n f =>\n f.kind === 'object' && classTransformerTypeModels.has(f.type),\n )))\n ) {\n importDeclarations.add('Type', 'class-transformer');\n if (useGetType) {\n property.decorators.push({\n name: 'Type',\n arguments: [`getType('${graphqlType}')`],\n });\n } else {\n property.decorators.push({ name: 'Type', arguments: [`() => ${graphqlType}`] });\n }\n }\n\n if (isCustomsApplicable) {\n for (const options of settings ?? []) {\n if (\n (options.kind === 'Decorator' && options.input && options.match?.(name)) ??\n true\n ) {\n property.decorators.push({\n name: options.name,\n arguments: options.arguments as string[],\n });\n ok(options.from, \"Missed 'from' part in configuration or field setting\");\n importDeclarations.create(options);\n }\n }\n }\n\n for (const decorate of config.decorate) {\n if (decorate.isMatchField(name) && decorate.isMatchType(inputType.name)) {\n property.decorators.push({\n name: decorate.name,\n arguments: decorate.arguments?.map(x => pupa(x, { propertyType })),\n });\n importDeclarations.create(decorate);\n }\n }\n }\n\n eventEmitter.emitSync('ClassProperty', property, {\n location,\n isList,\n propertyType,\n });\n }\n\n // Build statements array\n const statements: (StatementStructures | string)[] = [\n ...importDeclarations.toStatements(),\n classStructure,\n ];\n\n // Add registerType call if ESM compatible mode is enabled\n if (config.esmCompatible) {\n statements.push(`\\nregisterType('${inputType.name}', ${inputType.name});`);\n }\n\n sourceFile.set({\n statements,\n });\n}\n","import JSON5 from 'json5';\nimport { isObject, merge, omit, trim } from 'lodash-es';\nimport outmatch from 'outmatch';\nimport type { PlainObject } from 'simplytyped';\n\nimport type { GeneratorConfiguration } from '../types.js';\n\nexport type ObjectSetting = {\n /**\n * Act as named import or namespaceImport or defaultImport\n */\n name: string;\n kind: 'Decorator' | 'Field' | 'FieldType' | 'PropertyType' | 'ObjectType';\n arguments?: string[] | Record<string, unknown>;\n input: boolean;\n output: boolean;\n model: boolean;\n match?: (test: string) => boolean;\n from: string;\n namespace?: string;\n defaultImport?: string | true;\n namespaceImport?: string;\n namedImport?: boolean;\n};\n\ninterface ObjectSettingsFilterArgs {\n name: string;\n input?: boolean;\n output?: boolean;\n}\n\nexport class ObjectSettings extends Array<ObjectSetting> {\n shouldHideField({\n name,\n input = false,\n output = false,\n }: ObjectSettingsFilterArgs): boolean {\n const hideField = this.find(s => s.name === 'HideField');\n\n return Boolean(\n (hideField?.input && input) ||\n (hideField?.output && output) ||\n hideField?.match?.(name),\n );\n }\n\n getFieldType({\n name,\n input,\n output,\n }: ObjectSettingsFilterArgs): ObjectSetting | undefined {\n const fieldType = this.find(s => s.kind === 'FieldType');\n\n if (!fieldType) {\n return undefined;\n }\n\n if (fieldType.match) {\n return fieldType.match(name) ? fieldType : undefined;\n }\n\n if (input && !fieldType.input) {\n return undefined;\n }\n\n if (output && !fieldType.output) {\n return undefined;\n }\n\n return fieldType;\n }\n\n getPropertyType({\n name,\n input,\n output,\n }: ObjectSettingsFilterArgs): ObjectSetting | undefined {\n const propertyType = this.find(s => s.kind === 'PropertyType');\n\n if (!propertyType) {\n return undefined;\n }\n\n if (propertyType.match) {\n return propertyType.match(name) ? propertyType : undefined;\n }\n\n if (input && !propertyType.input) {\n return undefined;\n }\n\n if (output && !propertyType.output) {\n return undefined;\n }\n\n return propertyType;\n }\n\n getObjectTypeArguments(options: Record<string, unknown>): string[] {\n const objectTypeOptions = merge({}, options);\n const resultArguments: unknown[] = [objectTypeOptions];\n const objectType = this.find(s => s.kind === 'ObjectType');\n if (objectType && isObject(objectType.arguments)) {\n const name = (objectType.arguments as PlainObject).name;\n merge(objectTypeOptions, omit(objectType.arguments, 'name'));\n if (name) {\n resultArguments.unshift(name);\n }\n }\n return resultArguments.map(x => JSON5.stringify(x));\n }\n\n fieldArguments(): Record<string, unknown> | undefined {\n const item = this.find(item => item.kind === 'Field');\n if (item) {\n return item.arguments as Record<string, unknown>;\n }\n }\n}\n\nexport function createObjectSettings(args: {\n text: string;\n config: GeneratorConfiguration;\n}) {\n const { config, text } = args;\n const result = new ObjectSettings();\n const textLines = text.split('\\n');\n const documentationLines: string[] = [];\n\n let fieldElement = result.find(item => item.kind === 'Field');\n if (!fieldElement) {\n fieldElement = {\n name: '',\n kind: 'Field',\n arguments: {},\n } as ObjectSetting;\n }\n\n for (const line of textLines) {\n const match = /^@(?<name>\\w+(\\.(\\w+))?)\\((?<args>.*)\\)/.exec(line);\n const { element, documentLine } = createSettingElement({\n line,\n config,\n fieldElement,\n match,\n });\n\n if (element) {\n result.push(element);\n }\n\n if (documentLine) {\n documentationLines.push(line);\n }\n }\n\n return {\n settings: result,\n documentation: documentationLines.filter(Boolean).join('\\n') || undefined,\n };\n}\n\nfunction createSettingElement({\n line,\n config,\n fieldElement,\n match,\n}: {\n line: string;\n config: GeneratorConfiguration;\n fieldElement: ObjectSetting;\n match: RegExpExecArray | null;\n}) {\n const result = {\n documentLine: '',\n element: undefined as ObjectSetting | undefined,\n };\n if (line.startsWith('@deprecated')) {\n (fieldElement.arguments as Record<string, unknown>)['deprecationReason'] = trim(line.slice(11));\n\n result.element = fieldElement;\n\n return result;\n }\n\n if (line.startsWith('@complexity')) {\n let n = Number.parseInt(trim(line.slice(11)));\n if (n !== n || n < 1) n = 1;\n (fieldElement.arguments as Record<string, unknown>)['complexity'] = n;\n\n result.element = fieldElement;\n\n return result;\n }\n\n const name = match?.groups?.name;\n\n if (!(match && name)) {\n result.documentLine = line;\n return result;\n }\n\n const element: ObjectSetting = {\n kind: 'Decorator',\n name: '',\n arguments: [],\n input: false,\n output: false,\n model: false,\n from: '',\n };\n\n result.element = element;\n\n if (name === 'TypeGraphQL.omit' || name === 'HideField') {\n Object.assign(element, hideFieldDecorator(match));\n\n return result;\n }\n\n if (['FieldType', 'PropertyType'].includes(name) && match.groups?.args) {\n const options = customType(match.groups.args);\n merge(element, options.namespace && config.fields[options.namespace], options, {\n kind: name,\n });\n return result;\n }\n\n if (name === 'ObjectType' && match.groups?.args) {\n element.kind = 'ObjectType';\n const options = customType(match.groups.args) as Record<string, unknown>;\n if (typeof options[0] === 'string' && options[0]) {\n options.name = options[0];\n }\n if (isObject(options[1])) {\n merge(options, options[1]);\n }\n element.arguments = {\n name: options.name,\n isAbstract: options.isAbstract,\n };\n\n return result;\n }\n\n if (name === 'Directive' && match.groups?.args) {\n const options = customType(match.groups.args);\n merge(element, { model: true, from: '@nestjs/graphql' }, options, {\n name,\n namespace: false,\n kind: 'Decorator',\n arguments: Array.isArray(options.arguments)\n ? options.arguments.map(s => JSON5.stringify(s))\n : options.arguments,\n });\n\n return result;\n }\n\n const namespace = getNamespace(name);\n element.namespaceImport = namespace;\n const options = {\n name,\n arguments: (match.groups?.args || '')\n .split(',')\n .map(s => trim(s))\n .filter(Boolean),\n };\n merge(element, namespace && config.fields[namespace], options);\n\n return result;\n}\n\nfunction customType(args: string) {\n const result: Partial<ObjectSetting> = {};\n let options = parseArgs(args);\n if (typeof options === 'string') {\n options = { name: options };\n }\n Object.assign(result, options);\n const namespace = getNamespace(options.name);\n result.namespace = namespace;\n if ((options as { name: string | undefined }).name?.includes('.')) {\n result.namespaceImport = namespace;\n }\n\n if (typeof options.match === 'string' || Array.isArray(options.match)) {\n result.match = outmatch(options.match, { separator: false });\n }\n\n return result;\n}\n\nfunction hideFieldDecorator(match: RegExpExecArray) {\n const result: Partial<ObjectSetting> = {\n name: 'HideField',\n arguments: [],\n from: '@nestjs/graphql',\n defaultImport: undefined,\n namespaceImport: undefined,\n match: undefined,\n };\n if (!match.groups?.args) {\n result.output = true;\n return result;\n }\n\n if (match.groups.args.includes('{') && match.groups.args.includes('}')) {\n const options = parseArgs(match.groups.args) as Record<string, unknown>;\n result.output = Boolean(options.output);\n result.input = Boolean(options.input);\n if (typeof options.match === 'string' || Array.isArray(options.match)) {\n result.match = outmatch(options.match, { separator: false });\n }\n } else {\n if (/output:\\s*true/.test(match.groups.args)) {\n result.output = true;\n }\n if (/input:\\s*true/.test(match.groups.args)) {\n result.input = true;\n }\n }\n\n return result;\n}\n\nfunction parseArgs(string: string): Record<string, unknown> | string {\n try {\n return JSON5.parse(string);\n } catch {\n try {\n return JSON5.parse(`[${string}]`);\n } catch {\n throw new Error(`Failed to parse: ${string}`);\n }\n }\n}\n\nfunction getNamespace(name: unknown): string | undefined {\n if (name === undefined) {\n return undefined;\n }\n let result = String(name);\n if (result.includes('.')) {\n [result] = result.split('.');\n }\n return result;\n}\n","import { createObjectSettings, ObjectSettings } from '../helpers/object-settings.js';\nimport type { EventArguments, Field, Model } from '../types.js';\n\nexport function modelData(model: Model, args: EventArguments): void {\n const {\n config,\n modelNames,\n models,\n modelFields,\n fieldSettings,\n classTransformerTypeModels,\n } = args;\n\n modelNames.push(model.name);\n models.set(model.name, model);\n\n const modelFieldsValue = new Map<string, Field>();\n modelFields.set(model.name, modelFieldsValue);\n\n const fieldSettingsValue = new Map<string, ObjectSettings>();\n fieldSettings.set(model.name, fieldSettingsValue);\n\n for (const field of model.fields) {\n if (field.documentation) {\n const { documentation, settings } = createObjectSettings({\n text: field.documentation,\n config,\n });\n field.documentation = documentation;\n fieldSettingsValue.set(field.name, settings);\n }\n modelFieldsValue.set(field.name, field);\n }\n\n if (model.fields.some(field => field.type === 'Decimal')) {\n classTransformerTypeModels.add(model.name);\n }\n}\n","import type { ObjectSettings } from '../types.js';\n\nexport function createComment(documentation: string, settings?: ObjectSettings) {\n const documentationLines = documentation.split('\\n');\n const commentLines = ['/**'];\n\n for (const line of documentationLines) {\n commentLines.push(` * ${line}`);\n }\n\n const deprecationReason = settings?.fieldArguments()?.deprecationReason as string;\n\n if (deprecationReason) {\n commentLines.push(` * @deprecated ${deprecationReason}`);\n }\n\n commentLines.push(' */\\n');\n\n return commentLines.join('\\n');\n}\n","import type { Model } from '../types.js';\n\n/**\n * Represents a dependency graph where keys are model names and values are sets of dependent model names\n */\nexport type DependencyGraph = Map<string, Set<string>>;\n\n/**\n * Represents a set of model name pairs that have circular dependencies\n * Format: \"ModelA:ModelB\" where ModelA < ModelB alphabetically\n */\nexport type CircularDependencySet = Set<string>;\n\n/**\n * Build a dependency graph from Prisma models based on their relations\n */\nexport function buildDependencyGraph(models: Model[]): DependencyGraph {\n const graph: DependencyGraph = new Map();\n\n // Initialize all models in the graph\n for (const model of models) {\n graph.set(model.name, new Set());\n }\n\n // Add edges for each relation field\n for (const model of models) {\n const dependencies = graph.get(model.name)!;\n for (const field of model.fields) {\n // Only consider object/relation fields that reference other models\n if (field.kind === 'object' && field.type !== model.name) {\n // Check if the referenced type is actually a model\n if (graph.has(field.type)) {\n dependencies.add(field.type);\n }\n }\n }\n }\n\n return graph;\n}\n\n/**\n * Detect all circular dependencies in the dependency graph using DFS\n * Returns a set of model pairs that form cycles\n */\nexport function detectCircularDependencies(graph: DependencyGraph): CircularDependencySet {\n const circularPairs: CircularDependencySet = new Set();\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n function dfs(node: string): void {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const dependencies = graph.get(node) || new Set();\n for (const dep of dependencies) {\n if (!visited.has(dep)) {\n dfs(dep);\n } else if (recursionStack.has(dep)) {\n // Found a cycle - record all pairs in the cycle path\n const cycleStartIndex = path.indexOf(dep);\n if (cycleStartIndex !== -1) {\n const cyclePath = path.slice(cycleStartIndex);\n // Add all pairs in the cycle\n for (let i = 0; i < cyclePath.length; i++) {\n const a = cyclePath[i];\n const b = cyclePath[(i + 1) % cyclePath.length];\n // Store in alphabetical order for consistency\n const pair = a < b ? `${a}:${b}` : `${b}:${a}`;\n circularPairs.add(pair);\n }\n }\n }\n }\n\n path.pop();\n recursionStack.delete(node);\n }\n\n // Run DFS from each unvisited node\n for (const node of graph.keys()) {\n if (!visited.has(node)) {\n dfs(node);\n }\n }\n\n return circularPairs;\n}\n\n/**\n * Check if two models have a circular dependency relationship\n */\nexport function hasCircularDependency(\n circularDeps: CircularDependencySet,\n modelA: string,\n modelB: string,\n): boolean {\n const pair = modelA < modelB ? `${modelA}:${modelB}` : `${modelB}:${modelA}`;\n return circularDeps.has(pair);\n}\n\n/**\n * Get all models that are involved in any circular dependency\n */\nexport function getModelsInCircularDeps(circularDeps: CircularDependencySet): Set<string> {\n const models = new Set<string>();\n for (const pair of circularDeps) {\n const [a, b] = pair.split(':');\n models.add(a);\n models.add(b);\n }\n return models;\n}\n","export function getOutputTypeName(name: string) {\n return name.replace(/(?:OutputType|Output)$/, '');\n}\n","import { ok } from 'node:assert';\nimport JSON5 from 'json5';\nimport { castArray } from 'lodash-es';\nimport pupa from 'pupa';\nimport type { PlainObject } from 'simplytyped';\nimport {\n type ClassDeclarationStructure,\n type ExportSpecifierStructure,\n type StatementStructures,\n StructureKind,\n} from 'ts-morph';\n\nimport { createComment } from '../helpers/create-comment.js';\nimport { hasCircularDependency } from '../helpers/detect-circular-deps.js';\nimport { getGraphqlImport } from '../helpers/get-graphql-import.js';\nimport { getOutputTypeName } from '../helpers/get-output-type-name.js';\nimport { getPropertyType } from '../helpers/get-property-type.js';\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport { isManyAndReturnOutputType } from '../helpers/is-many-and-return.js';\nimport {\n createObjectSettings,\n type ObjectSetting,\n ObjectSettings,\n} from '../helpers/object-settings.js';\nimport { propertyStructure } from '../helpers/property-structure.js';\nimport { relativePath } from '../helpers/relative-path.js';\nimport type { EventArguments, OutputType } from '../types.js';\n\nconst nestjsGraphql = '@nestjs/graphql';\n\nexport function modelOutputType(outputType: OutputType, args: EventArguments): void {\n const {\n circularDependencies,\n config,\n eventEmitter,\n fieldSettings,\n getSourceFile,\n modelFields,\n models,\n output,\n } = args;\n\n if (isManyAndReturnOutputType(outputType.name)) return;\n\n const model = models.get(outputType.name);\n ok(model, `Cannot find model by name ${outputType.name}`);\n\n const sourceFile = getSourceFile({\n name: outputType.name,\n type: 'model',\n });\n const sourceFileStructure = sourceFile.getStructure();\n const exportDeclaration = getExportDeclaration(\n model.name,\n sourceFileStructure.statements as StatementStructures[],\n );\n const importDeclarations = new ImportDeclarationMap();\n const classStructure: ClassDeclarationStructure = {\n decorators: [\n {\n arguments: [],\n name: 'ObjectType',\n },\n ],\n isExported: true,\n kind: StructureKind.Class,\n name: outputType.name,\n properties: [],\n };\n (sourceFileStructure.statements as StatementStructures[]).push(classStructure);\n ok(classStructure.decorators, 'classStructure.decorators is undefined');\n const decorator = classStructure.decorators.find(d => d.name === 'ObjectType');\n ok(decorator, 'ObjectType decorator not found');\n\n let modelSettings: ObjectSettings | undefined;\n // Get model settings from documentation\n if (model.documentation) {\n const objectTypeOptions: PlainObject = {};\n const { documentation, settings } = createObjectSettings({\n config,\n text: model.documentation,\n });\n if (documentation) {\n if (!classStructure.leadingTrivia) {\n classStructure.leadingTrivia = createComment(documentation);\n }\n objectTypeOptions.description = documentation;\n }\n decorator.arguments = settings.getObjectTypeArguments(objectTypeOptions);\n modelSettings = settings;\n }\n\n importDeclarations.add('Field', nestjsGraphql);\n importDeclarations.add('ObjectType', nestjsGraphql);\n\n // Track types that need lazy loading due to circular dependencies\n const lazyTypes = new Set<string>();\n\n // Add type registry imports if ESM compatible mode is enabled\n if (config.esmCompatible) {\n const typeRegistryPath = relativePath(\n sourceFile.getFilePath(),\n `${output}/type-registry.ts`,\n );\n importDeclarations.add('registerType', typeRegistryPath);\n importDeclarations.add('getType', typeRegistryPath);\n }\n\n for (const field of outputType.fields) {\n if (config.omitModelsCount && field.name === '_count') continue;\n\n let fileType = 'model';\n const { isList, location, namespace, type } = field.outputType;\n\n let outputTypeName = String(type);\n if (namespace !== 'model') {\n fileType = 'output';\n outputTypeName = getOutputTypeName(outputTypeName);\n }\n const modelField = modelFields.get(model.name)?.get(field.name);\n const settings = fieldSettings.get(model.name)?.get(field.name);\n const fieldType = settings?.getFieldType({\n name: outputType.name,\n output: true,\n });\n const propertySettings = settings?.getPropertyType({\n name: outputType.name,\n output: true,\n });\n\n const propertyType = castArray(\n propertySettings?.name ??\n getPropertyType({\n location,\n type: outputTypeName,\n }),\n );\n\n // For model we keep only one type\n propertyType.splice(1, propertyType.length);\n\n if (field.isNullable && !isList) {\n propertyType.push('null');\n }\n\n let graphqlType: string;\n let useGetType = false;\n\n if (fieldType) {\n graphqlType = fieldType.name;\n importDeclarations.create({ ...fieldType });\n } else {\n const graphqlImport = getGraphqlImport({\n config,\n fileType,\n getSourceFile,\n isId: modelField?.isId,\n location,\n noTypeId: config.noTypeId,\n sourceFile,\n typeName: outputTypeName,\n });\n\n graphqlType = graphqlImport.name;\n\n if (graphqlImport.name !== outputType.name && graphqlImport.specifier) {\n // Check for circular dependency in ESM mode\n const isCircular =\n config.esmCompatible &&\n location === 'outputObjectTypes' &&\n namespace === 'model' &&\n hasCircularDependency(circularDependencies, outputType.name, outputTypeName);\n\n if (isCircular) {\n importDeclarations.addType(graphqlImport.name, graphqlImport.specifier);\n lazyTypes.add(graphqlImport.name);\n useGetType = true;\n } else {\n importDeclarations.add(graphqlImport.name, graphqlImport.specifier);\n }\n }\n }\n\n const property = propertyStructure({\n hasExclamationToken: true,\n hasQuestionToken: location === 'outputObjectTypes',\n isList,\n isNullable: field.isNullable,\n name: field.name,\n propertyType,\n });\n\n if (typeof property.leadingTrivia === 'string' && modelField?.documentation) {\n property.leadingTrivia += createComment(modelField.documentation, settings);\n }\n\n classStructure.properties?.push(property);\n\n if (propertySettings) {\n importDeclarations.create({ ...propertySettings });\n } else if (propertyType.includes('Decimal')) {\n importDeclarations.add('Decimal', `${config.prismaClientImport}/../internal/prismaNamespace`);\n }\n\n ok(property.decorators, 'property.decorators is undefined');\n\n const shouldHideField =\n settings?.shouldHideField({ name: outputType.name, output: true }) ||\n config.decorate.some(\n d =>\n d.name === 'HideField' &&\n d.from === '@nestjs/graphql' &&\n d.isMatchField(field.name) &&\n d.isMatchType(outputTypeName),\n );\n\n if (shouldHideField) {\n importDeclarations.add('HideField', nestjsGraphql);\n property.decorators.push({ arguments: [], name: 'HideField' });\n } else {\n // Generate `@Field()` decorator\n let typeExpression: string;\n if (useGetType) {\n typeExpression = isList\n ? `() => [getType('${graphqlType}')]`\n : `() => getType('${graphqlType}')`;\n } else {\n typeExpression = isList ? `() => [${graphqlType}]` : `() => ${graphqlType}`;\n }\n\n property.decorators.push({\n arguments: [\n typeExpression,\n JSON5.stringify({\n ...settings?.fieldArguments(),\n defaultValue: ['number', 'string', 'boolean'].includes(\n typeof modelField?.default,\n )\n ? modelField?.default\n : undefined,\n description: modelField?.documentation,\n nullable: Boolean(field.isNullable),\n }),\n ],\n name: 'Field',\n });\n\n for (const setting of settings ?? []) {\n if (shouldBeDecorated(setting) && (setting.match?.(field.name) ?? true)) {\n property.decorators.push({\n arguments: setting.arguments as string[],\n name: setting.name,\n });\n ok(setting.from, \"Missed 'from' part in configuration or field setting\");\n importDeclarations.create(setting);\n }\n }\n\n for (const decorate of config.decorate) {\n if (decorate.isMatchField(field.name) && decorate.isMatchType(outputTypeName)) {\n property.decorators.push({\n arguments: decorate.arguments?.map(x => pupa(x, { propertyType })),\n name: decorate.name,\n });\n importDeclarations.create(decorate);\n }\n }\n }\n\n eventEmitter.emitSync('ClassProperty', property, {\n isList,\n location,\n propertyType,\n });\n }\n\n // Generate class decorators from model settings\n for (const setting of modelSettings ?? []) {\n if (shouldBeDecorated(setting)) {\n classStructure.decorators.push({\n arguments: setting.arguments as string[],\n name: setting.name,\n });\n importDeclarations.create(setting);\n }\n }\n\n // Build statements array\n const statements: (StatementStructures | string)[] = [\n ...importDeclarations.toStatements(),\n classStructure,\n ];\n\n // Add registerType call if ESM compatible mode is enabled\n if (config.esmCompatible) {\n statements.push(`\\nregisterType('${outputType.name}', ${outputType.name});`);\n }\n\n if (exportDeclaration) {\n sourceFile.set({\n statements: [exportDeclaration, '\\n', classStructure],\n });\n const classDeclaration = sourceFile.getClassOrThrow(model.name);\n const commentedText = classDeclaration\n .getText()\n .split('\\n')\n .map(x => `// ${x}`);\n classDeclaration.remove();\n sourceFile.addStatements(['\\n', ...commentedText]);\n } else {\n sourceFile.set({\n statements,\n });\n }\n}\n\nfunction shouldBeDecorated(setting: ObjectSetting): boolean {\n return (\n setting.kind === 'Decorator' &&\n (setting.output || setting.model) &&\n !(setting.output && setting.model)\n );\n}\n\nfunction getExportDeclaration(name: string, statements: StatementStructures[]): StatementStructures | undefined {\n return statements.find(structure => {\n return (\n structure.kind === StructureKind.ExportDeclaration &&\n (structure.namedExports as ExportSpecifierStructure[]).some(\n o => (o.alias ?? o.name) === name,\n )\n );\n });\n}\n","import type { EventArguments, EventEmitter, InputType } from '../types.js';\n\nexport function noAtomicOperations(eventEmitter: EventEmitter): void {\n eventEmitter.on('BeforeInputType', beforeInputType);\n eventEmitter.on('BeforeGenerateFiles', beforeGenerateFiles);\n}\n\nfunction beforeInputType(args: EventArguments & { inputType: InputType }): void {\n const { inputType, getModelName } = args;\n\n for (const field of inputType.fields) {\n const fieldName = field.name;\n field.inputTypes = field.inputTypes.filter(it => {\n const inputTypeName = String(it.type);\n const modelName = getModelName(inputTypeName);\n\n if (\n isAtomicOperation(inputTypeName) ||\n (modelName && isListInput(inputTypeName, modelName, fieldName))\n ) {\n return false;\n }\n return true;\n });\n }\n}\n\nfunction beforeGenerateFiles(args: EventArguments): void {\n const { project } = args;\n\n for (const sourceFile of project.getSourceFiles()) {\n const className = sourceFile.getClass(() => true)?.getName();\n\n if (className && isAtomicOperation(className)) {\n project.removeSourceFile(sourceFile);\n }\n }\n}\n\nfunction isAtomicOperation(typeName: string): boolean {\n if (typeName.endsWith('FieldUpdateOperationsInput')) {\n return true;\n }\n return false;\n}\n\nfunction isListInput(typeName: string, model: string, field: string): boolean {\n return (\n typeName === `${model}Create${field}Input` ||\n typeName === `${model}Update${field}Input`\n );\n}\n","export function getEnumName(referenceName: string) {\n // `${Role}`\n return referenceName.slice(3, -2);\n}\n","import { ok } from 'node:assert';\nimport JSON5 from 'json5';\nimport { castArray } from 'lodash-es';\nimport { type ClassDeclarationStructure, StructureKind } from 'ts-morph';\n\nimport { getEnumName } from '../helpers/get-enum-name.js';\nimport { getGraphqlImport } from '../helpers/get-graphql-import.js';\nimport { getOutputTypeName } from '../helpers/get-output-type-name.js';\nimport { getPropertyType } from '../helpers/get-property-type.js';\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport { propertyStructure } from '../helpers/property-structure.js';\nimport type { EventArguments, OutputType } from '../types.js';\n\nconst nestjsGraphql = '@nestjs/graphql';\n\nexport function outputType(outputTypeArg: OutputType, args: EventArguments): void {\n const { config, eventEmitter, fieldSettings, getModelName, getSourceFile, models } =\n args;\n const importDeclarations = new ImportDeclarationMap();\n\n const fileType = 'output';\n const modelName = getModelName(outputTypeArg.name) ?? '';\n const model = models.get(modelName);\n const isAggregateOutput =\n model &&\n /(?:Count|Avg|Sum|Min|Max)AggregateOutputType$/.test(outputTypeArg.name) &&\n String(outputTypeArg.name).startsWith(model.name);\n const isCountOutput =\n model?.name && outputTypeArg.name === `${model.name}CountOutputType`;\n\n if (!config.emitBlocks.outputs && !isCountOutput) return;\n\n // Get rid of bogus suffixes\n outputTypeArg.name = getOutputTypeName(outputTypeArg.name);\n\n if (isAggregateOutput) {\n eventEmitter.emitSync('AggregateOutput', { ...args, outputType: outputTypeArg });\n }\n\n const sourceFile = getSourceFile({\n name: outputTypeArg.name,\n type: fileType,\n });\n\n const classStructure: ClassDeclarationStructure = {\n decorators: [\n {\n arguments: [],\n name: 'ObjectType',\n },\n ],\n isExported: true,\n kind: StructureKind.Class,\n name: outputTypeArg.name,\n properties: [],\n };\n\n importDeclarations.add('Field', nestjsGraphql);\n importDeclarations.add('ObjectType', nestjsGraphql);\n\n for (const field of outputTypeArg.fields) {\n const { isList, location, type } = field.outputType;\n const outputTypeName = getOutputTypeName(String(type));\n const settings = isCountOutput\n ? undefined\n : model && fieldSettings.get(model.name)?.get(field.name);\n const propertySettings = settings?.getPropertyType({\n name: outputTypeArg.name,\n output: true,\n });\n\n const isCustomsApplicable =\n outputTypeName === model?.fields.find(f => f.name === field.name)?.type;\n\n field.outputType.type = outputTypeName;\n\n const propertyType = castArray(\n propertySettings?.name ??\n getPropertyType({\n location,\n type: outputTypeName,\n }),\n );\n\n const property = propertyStructure({\n hasQuestionToken: isCountOutput ? true : undefined,\n isList,\n isNullable: field.isNullable,\n name: field.name,\n propertyType,\n });\n\n classStructure.properties?.push(property);\n\n if (propertySettings) {\n importDeclarations.create({ ...propertySettings });\n } else if (propertyType.includes('Decimal')) {\n importDeclarations.add('Decimal', `${config.prismaClientImport}/../internal/prismaNamespace`);\n }\n\n // Get graphql type\n let graphqlType: string;\n const shouldHideField =\n settings?.shouldHideField({\n name: outputTypeArg.name,\n output: true,\n }) ||\n config.decorate.some(\n d =>\n d.name === 'HideField' &&\n d.from === '@nestjs/graphql' &&\n d.isMatchField(field.name) &&\n d.isMatchType(outputTypeName),\n );\n\n const fieldType = settings?.getFieldType({\n name: outputTypeArg.name,\n output: true,\n });\n\n if (fieldType && isCustomsApplicable && !shouldHideField) {\n graphqlType = fieldType.name;\n importDeclarations.create({ ...fieldType });\n } else {\n const graphqlImport = getGraphqlImport({\n config,\n fileType,\n getSourceFile,\n isId: false,\n location,\n sourceFile,\n typeName: outputTypeName,\n });\n const referenceName =\n location === 'enumTypes' ? getEnumName(propertyType[0]) : propertyType[0];\n\n graphqlType = graphqlImport.name;\n\n if (\n graphqlImport.specifier &&\n !importDeclarations.has(graphqlImport.name) &&\n ((graphqlImport.name !== outputTypeArg.name && !shouldHideField) ||\n (shouldHideField && referenceName === graphqlImport.name))\n ) {\n importDeclarations.set(graphqlImport.name, {\n moduleSpecifier: graphqlImport.specifier,\n namedImports: [{ name: graphqlImport.name }],\n });\n }\n }\n\n ok(property.decorators, 'property.decorators is undefined');\n\n if (shouldHideField) {\n importDeclarations.add('HideField', nestjsGraphql);\n property.decorators.push({ arguments: [], name: 'HideField' });\n } else {\n // Generate `@Field()` decorator\n property.decorators.push({\n arguments: [\n isList ? `() => [${graphqlType}]` : `() => ${graphqlType}`,\n JSON5.stringify({\n ...settings?.fieldArguments(),\n nullable: Boolean(field.isNullable),\n }),\n ],\n name: 'Field',\n });\n\n if (isCustomsApplicable) {\n for (const options of settings ?? []) {\n if (\n (options.kind === 'Decorator' &&\n options.output &&\n options.match?.(field.name)) ??\n true\n ) {\n property.decorators.push({\n arguments: options.arguments as string[],\n name: options.name,\n });\n ok(options.from, \"Missed 'from' part in configuration or field setting\");\n importDeclarations.create(options);\n }\n }\n }\n }\n\n eventEmitter.emitSync('ClassProperty', property, {\n isList,\n location,\n propertyType,\n });\n }\n\n sourceFile.set({\n statements: [...importDeclarations.toStatements(), classStructure],\n });\n}\n","import { rmdirSync } from 'node:fs';\n\nimport type { EventArguments, EventEmitter } from '../types.js';\n\nexport function purgeOutput(emitter: EventEmitter): void {\n emitter.on('Begin', begin);\n emitter.on('End', end);\n}\n\nfunction begin({ project, output }: EventArguments): void {\n const sourceFiles = project.getDirectory(output)?.getDescendantSourceFiles();\n\n if (sourceFiles) {\n for (const sourceFile of sourceFiles) {\n sourceFile.delete();\n }\n }\n}\n\nfunction end({ project, output }: EventArguments): void {\n const directories = project\n .getDirectory(output)\n ?.getDescendantDirectories()\n .filter(directory => directory.getSourceFiles().length === 0)\n .map(directory => directory.getPath());\n\n for (const directory of directories ?? []) {\n try {\n rmdirSync(directory);\n } catch {\n // Ignore errors\n }\n }\n}\n","import {\n type Directory,\n type ExportDeclarationStructure,\n type SourceFile,\n StructureKind,\n} from 'ts-morph';\n\nimport type { EventArguments, EventEmitter } from '../types.js';\n\nexport enum ReExport {\n None = 'None',\n Directories = 'Directories',\n Single = 'Single',\n All = 'All',\n}\n\nexport function reExport(emitter: EventEmitter): void {\n emitter.on('BeforeGenerateFiles', beforeGenerateFiles);\n}\n\nfunction beforeGenerateFiles(args: EventArguments): void {\n const { project, output, config } = args;\n const rootDirectory = project.getDirectoryOrThrow(output);\n\n if ([ReExport.Directories, ReExport.All].includes(config.reExport)) {\n for (const directory of rootDirectory.getDescendantDirectories()) {\n let indexSourceFile: SourceFile | undefined;\n\n const exportDeclarations: ExportDeclarationStructure[] = directory\n .getSourceFiles()\n .filter(sourceFile => {\n return sourceFile.getBaseName() !== 'index.ts';\n })\n .map(sourcesFile => getExportDeclaration(directory, sourcesFile));\n\n if (exportDeclarations.length > 0) {\n indexSourceFile = directory.createSourceFile(\n 'index.ts',\n {\n statements: exportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n\n if (indexSourceFile) {\n continue;\n }\n\n const namespaceExportDeclarations: ExportDeclarationStructure[] = directory\n .getDirectories()\n .map(sourceDirectory =>\n getNamespaceExportDeclaration(directory, sourceDirectory),\n );\n\n project.createSourceFile(\n `${directory.getPath()}/index.ts`,\n {\n statements: namespaceExportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n }\n\n if (config.reExport === ReExport.Single) {\n const exportDeclarations: ExportDeclarationStructure[] = project\n .getSourceFiles()\n .filter(sourceFile => {\n return sourceFile.getBaseName() !== 'index.ts';\n })\n .map(sourceFile => getExportDeclaration(rootDirectory, sourceFile));\n rootDirectory.createSourceFile(\n 'index.ts',\n {\n statements: exportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n\n if (config.reExport === ReExport.All) {\n const exportDeclarations: ExportDeclarationStructure[] = [];\n for (const directory of rootDirectory.getDirectories()) {\n if (directory.getBaseName() === 'node_modules') continue;\n const sourceFile = directory.getSourceFileOrThrow('index.ts');\n exportDeclarations.push(getExportDeclaration(rootDirectory, sourceFile));\n }\n rootDirectory.createSourceFile(\n 'index.ts',\n {\n statements: exportDeclarations,\n },\n {\n overwrite: true,\n },\n );\n }\n}\n\nfunction getExportDeclaration(\n directory: Directory,\n sourceFile: SourceFile,\n): ExportDeclarationStructure {\n // For ESM, ensure module specifiers have .js extension\n let moduleSpecifier = directory.getRelativePathAsModuleSpecifierTo(sourceFile);\n if (!moduleSpecifier.endsWith('.js') && !moduleSpecifier.endsWith('.ts')) {\n moduleSpecifier = moduleSpecifier + '.js';\n } else if (moduleSpecifier.endsWith('.ts')) {\n moduleSpecifier = moduleSpecifier.slice(0, -3) + '.js';\n }\n\n return {\n kind: StructureKind.ExportDeclaration,\n namedExports: sourceFile.getExportSymbols().map(s => ({ name: s.getName() })),\n moduleSpecifier,\n };\n}\n\nfunction getNamespaceExportDeclaration(\n directory: Directory,\n sourceDirectory: Directory,\n): ExportDeclarationStructure {\n let moduleSpecifier = directory.getRelativePathAsModuleSpecifierTo(sourceDirectory);\n if (!moduleSpecifier.endsWith('/index.js')) {\n moduleSpecifier = moduleSpecifier + '/index.js';\n }\n\n return {\n kind: StructureKind.ExportDeclaration,\n moduleSpecifier,\n };\n}\n","type EnumValueDocInfo = { description: string } | { deprecationReason: string };\n\nexport function extractEnumValueDocs(\n values: readonly { name: string; [key: string]: unknown }[],\n): Record<string, EnumValueDocInfo> {\n return Object.fromEntries(\n values\n .map((value): [string, EnumValueDocInfo] | null => {\n const { name } = value;\n const documentation: unknown = value.documentation;\n\n if (typeof documentation !== 'string') return null;\n\n if (documentation.startsWith('@deprecated')) {\n return [name, { deprecationReason: documentation.slice(11).trim() }];\n }\n\n return [name, { description: documentation }];\n })\n .filter((entry): entry is [string, EnumValueDocInfo] => entry !== null),\n );\n}\n","import { type EnumDeclarationStructure, StructureKind } from 'ts-morph';\n\nimport { ImportDeclarationMap } from '../helpers/import-declaration-map.js';\nimport type { EventArguments, SchemaEnum } from '../types.js';\nimport { extractEnumValueDocs } from './prisma-enum-doc.js';\n\nexport function registerEnum(enumType: SchemaEnum, args: EventArguments): void {\n const { config, enums, getSourceFile } = args;\n\n if (!config.emitBlocks.prismaEnums && !enums[enumType.name]) return;\n\n const dataModelEnum = enums[enumType.name];\n const enumTypesData = dataModelEnum?.values ?? [];\n const sourceFile = getSourceFile({\n name: enumType.name,\n type: 'enum',\n });\n\n const importDeclarations = new ImportDeclarationMap();\n\n importDeclarations.set('registerEnumType', {\n moduleSpecifier: '@nestjs/graphql',\n namedImports: [{ name: 'registerEnumType' }],\n });\n\n // Extract valuesMap from enum documentation\n const valuesMap = extractEnumValueDocs(enumTypesData);\n\n // Remove entries with no description or deprecationReason\n const filteredValuesMap = Object.fromEntries(\n Object.entries(valuesMap).filter(([, v]) => Object.keys(v).length > 0),\n );\n\n // Format only if needed\n const hasValuesMap = Object.keys(filteredValuesMap).length > 0;\n const formattedValuesMap = hasValuesMap\n ? JSON.stringify(filteredValuesMap, null, 2).replace(/\"([^\"]+)\":/g, '$1:')\n : '';\n const valuesMapEntry = hasValuesMap ? `, valuesMap: ${formattedValuesMap}` : '';\n\n const enumStructure: EnumDeclarationStructure = {\n kind: StructureKind.Enum,\n isExported: true,\n name: enumType.name,\n members: enumType.values.map(v => ({\n name: v,\n initializer: JSON.stringify(v),\n })),\n };\n\n sourceFile.set({\n statements: [\n ...importDeclarations.toStatements(),\n enumStructure,\n '\\n',\n `registerEnumType(${enumType.name}, { name: '${enumType.name}', description: ${JSON.stringify(\n dataModelEnum?.documentation,\n )}${valuesMapEntry} })`,\n ],\n });\n}\n","import { StructureKind } from 'ts-morph';\n\nimport { relativePath } from '../helpers/relative-path.js';\nimport type { EventArguments } from '../types.js';\n\n/**\n * Generate the register-all-types.ts file that imports all generated types\n * to ensure their registerType() calls are executed.\n *\n * This file must be imported early in the application, before any code\n * tries to use getType() for lazy type resolution.\n *\n * This solves the ESM bundling issue where CJS would return valid bundles\n * but ESM complains about broken dependency cycles.\n */\nexport function generateRegisterAllTypes(args: EventArguments): void {\n const { config, output, project } = args;\n\n if (!config.esmCompatible) {\n return;\n }\n\n const rootDirectory = project.getDirectory(output) || project.createDirectory(output);\n const sourceFile = rootDirectory.createSourceFile(\n 'register-all-types.ts',\n undefined,\n { overwrite: true },\n );\n\n // Collect all generated source files that have registerType() calls\n const importPaths: string[] = [];\n const typeNames: string[] = [];\n\n // Get all source files in the output directory\n const allSourceFiles = project.getSourceFiles(`${output}/**/*.ts`);\n\n for (const file of allSourceFiles) {\n const filePath = file.getFilePath();\n\n // Skip utility files and the register file itself\n if (\n filePath.endsWith('type-registry.ts') ||\n filePath.endsWith('register-all-types.ts') ||\n filePath.endsWith('index.ts')\n ) {\n continue;\n }\n\n // Check if this file has a registerType() call\n const fileText = file.getText();\n const registerMatch = fileText.match(/registerType\\(['\"]([^'\"]+)['\"]/);\n if (registerMatch) {\n // Get relative path from register-all-types.ts to this file\n const relPath = relativePath(sourceFile.getFilePath(), filePath);\n importPaths.push(relPath);\n typeNames.push(registerMatch[1]);\n }\n }\n\n // Sort for consistent output\n importPaths.sort();\n typeNames.sort();\n\n // Generate the file content with proper ESM handling\n const fileContent = `/**\n * ESM Type Registration Module\n *\n * This file registers all generated types with the type registry to solve\n * ESM circular dependency issues. In ESM, unlike CommonJS, circular imports\n * can result in undefined values because modules are evaluated in a different order.\n *\n * IMPORTANT: Import this file at the very top of your application entry point,\n * BEFORE any other code that uses the generated types.\n *\n * Example usage in main.ts:\n *\n * // This MUST be the first import\n * import './@generated/register-all-types.js';\n *\n * // Now you can safely import and use generated types\n * import { NestFactory } from '@nestjs/core';\n * import { AppModule } from './app.module.js';\n *\n * Why this is needed:\n * - ESM uses \"live bindings\" where imports reference the actual export\n * - With circular deps (User -> Post -> User), one module isn't ready when imported\n * - CJS would give a partial object that fills in later; ESM gives undefined\n * - This registry pattern defers type resolution until runtime when all modules are loaded\n */\n\nimport { markRegistrationComplete } from './type-registry.js';\n\n// Import all generated type files to trigger their registerType() calls\n// These are side-effect imports that populate the type registry\n${importPaths.map(p => `import '${p}';`).join('\\n')}\n\n// Mark registration as complete to enable warning messages\nmarkRegistrationComplete();\n\n// Export type names for validation (optional)\nexport const registeredTypes = [\n${typeNames.map(n => ` '${n}',`).join('\\n')}\n] as const;\n\nexport type RegisteredTypeName = typeof registeredTypes[number];\n`;\n\n sourceFile.addStatements(fileContent);\n}\n","import { isWhereUniqueInputType } from '../helpers/is-where-unique-input-type.js';\nimport type { EventArguments, EventEmitter, InputType } from '../types.js';\n\nexport function requireSingleFieldsInWhereUniqueInput(eventEmitter: EventEmitter): void {\n eventEmitter.on('BeforeInputType', beforeInputType);\n}\n\nfunction beforeInputType(args: EventArguments & { inputType: InputType }): void {\n const { inputType } = args;\n\n if (!isWhereUniqueInputType(inputType.name) || inputType.fields.length !== 1) {\n return;\n }\n\n for (const field of inputType.fields) {\n field.isRequired = true;\n field.isNullable = false;\n }\n}\n","import { StructureKind } from 'ts-morph';\n\nimport type { EventArguments } from '../types.js';\n\n/**\n * Generate the type-registry.ts file that provides lazy type resolution\n * for circular dependencies in ESM environments.\n *\n * This solves the ESM bundling issue where CJS would return valid bundles\n * but ESM complains about broken dependency cycles. In ESM, circular imports\n * can result in undefined values because module evaluation order differs from CJS.\n *\n * The registry pattern defers type resolution until runtime when all modules\n * have been fully initialized.\n */\nexport function generateTypeRegistry(args: EventArguments): void {\n const { config, output, project } = args;\n\n if (!config.esmCompatible) {\n return;\n }\n\n const rootDirectory = project.getDirectory(output) || project.createDirectory(output);\n\n const sourceFile = rootDirectory.createSourceFile(\n 'type-registry.ts',\n undefined,\n { overwrite: true },\n );\n\n // Generate a comprehensive type registry with error handling and forwardRef support\n const registryCode = `/**\n * Type Registry for ESM Circular Dependency Resolution\n *\n * In ESM, circular dependencies behave differently than CommonJS:\n * - CJS: Modules get a partial/incomplete export object that gets filled in\n * - ESM: Imports are \"live bindings\" but can be undefined if not yet initialized\n *\n * This registry solves this by:\n * 1. Deferring type resolution until runtime (after all modules are loaded)\n * 2. Providing a forwardRef pattern for GraphQL field type declarations\n * 3. Validating all types are registered before they're needed\n */\n\nconst registry = new Map<string, unknown>();\nconst pendingResolutions = new Map<string, Array<(type: unknown) => void>>();\nlet registrationComplete = false;\n\n/**\n * Register a type with the registry.\n * This should be called at module load time after the class is defined.\n */\nexport function registerType(name: string, type: unknown): void {\n if (type === undefined) {\n console.warn(\\`[nestjs-prisma-graphql] Warning: Registering undefined type for \"\\${name}\". This may indicate a circular dependency issue.\\`);\n }\n registry.set(name, type);\n\n // Resolve any pending forwardRef callbacks\n const pending = pendingResolutions.get(name);\n if (pending) {\n for (const callback of pending) {\n callback(type);\n }\n pendingResolutions.delete(name);\n }\n}\n\n/**\n * Get a type from the registry.\n * Returns the type if registered, undefined otherwise.\n *\n * For use in \\\\@Field(() => getType('TypeName')) decorators.\n */\nexport function getType<T = unknown>(name: string): T {\n const type = registry.get(name);\n if (type === undefined && registrationComplete) {\n console.warn(\\`[nestjs-prisma-graphql] Warning: Type \"\\${name}\" not found in registry. Ensure register-all-types is imported before using generated types.\\`);\n }\n return type as T;\n}\n\n/**\n * Create a forward reference to a type that may not be registered yet.\n * This is useful for handling circular dependencies where type A references type B\n * and type B references type A.\n *\n * Usage: \\\\@Field(() => forwardRef('Post'))\n */\nexport function forwardRef<T = unknown>(name: string): () => T {\n return () => {\n const type = registry.get(name);\n if (type === undefined) {\n throw new Error(\n \\`[nestjs-prisma-graphql] Type \"\\${name}\" not registered. \\\\n\\` +\n \\`This usually means:\\\\n\\` +\n \\` 1. The register-all-types.ts file was not imported early enough\\\\n\\` +\n \\` 2. There's a circular dependency that couldn't be resolved\\\\n\\` +\n \\` 3. The type file failed to load\\\\n\\\\n\\` +\n \\`Make sure to import 'register-all-types' at the top of your main.ts or app.module.ts\\`\n );\n }\n return type as T;\n };\n}\n\n/**\n * Lazily resolve a type, returning a thunk that can be called later.\n * This is the safest pattern for circular references in ESM.\n *\n * Usage: \\\\@Field(lazyType('Post'))\n */\nexport function lazyType<T = unknown>(name: string): () => T {\n return () => getType<T>(name);\n}\n\n/**\n * Mark registration as complete. Called after all types are imported.\n * This enables warning messages for missing types.\n */\nexport function markRegistrationComplete(): void {\n registrationComplete = true;\n\n // Warn about any unresolved forward refs\n if (pendingResolutions.size > 0) {\n const missing = Array.from(pendingResolutions.keys()).join(', ');\n console.warn(\\`[nestjs-prisma-graphql] Warning: Unresolved forward references: \\${missing}\\`);\n }\n}\n\n/**\n * Get all registered type names (useful for debugging)\n */\nexport function getRegisteredTypes(): string[] {\n return Array.from(registry.keys());\n}\n\n/**\n * Check if a type is registered\n */\nexport function isTypeRegistered(name: string): boolean {\n return registry.has(name);\n}\n\n/**\n * Validate that all expected types are registered.\n * Throws an error if any types are missing.\n */\nexport function validateRegistry(expectedTypes: string[]): void {\n const missing = expectedTypes.filter(name => !registry.has(name));\n if (missing.length > 0) {\n throw new Error(\n \\`[nestjs-prisma-graphql] Missing type registrations: \\${missing.join(', ')}\\\\n\\` +\n \\`Ensure register-all-types.ts is imported before using these types.\\`\n );\n }\n}\n`;\n\n sourceFile.addStatements(registryCode);\n}\n","export function warning(message: string | string[]): void {\n if (Array.isArray(message)) {\n console.log('nestjs-prisma-graphql:');\n console.log(message.join('\\n'));\n } else {\n console.log('nestjs-prisma-graphql:', message);\n }\n}\n","type EmittedBlockType =\n | 'prismaEnums'\n | 'schemaEnums'\n | 'models'\n | 'inputs'\n | 'args'\n | 'outputs';\n\nexport type EmitBlocksOption = 'enums' | 'models' | 'inputs' | 'args' | 'outputs';\n\nconst allEmmittedBlocks: EmittedBlockType[] = [\n 'prismaEnums',\n 'schemaEnums',\n 'models',\n 'inputs',\n 'args',\n 'outputs',\n];\n\nconst blocksDependencyMap: Record<EmitBlocksOption, EmittedBlockType[]> = {\n enums: ['schemaEnums', 'prismaEnums'],\n models: ['models', 'schemaEnums'],\n inputs: ['inputs', 'prismaEnums'],\n outputs: ['outputs'],\n args: ['args', 'inputs', 'prismaEnums'],\n};\n\nexport function createEmitBlocks(data?: string[]): Record<EmittedBlockType, boolean> {\n if (!data) {\n return Object.fromEntries(allEmmittedBlocks.map(block => [block, true])) as Record<\n EmittedBlockType,\n boolean\n >;\n }\n\n let blocksToEmit = {} as Record<EmittedBlockType, boolean>;\n\n for (const block of data) {\n if (!Object.keys(blocksDependencyMap).includes(block)) continue;\n\n blocksToEmit = {\n ...blocksToEmit,\n ...Object.fromEntries(\n (blocksDependencyMap[block as EmitBlocksOption] as EmittedBlockType[]).map(block => [block, true]),\n ),\n };\n }\n\n return blocksToEmit;\n}\n","import { ok } from 'node:assert';\nimport { existsSync } from 'node:fs';\n\nimport filenamify from 'filenamify';\nimport { unflatten } from 'flat';\nimport JSON5 from 'json5';\nimport { memoize, merge, trim } from 'lodash-es';\nimport outmatch from 'outmatch';\n\ntype Dictionary<T = unknown> = Record<string, T>;\n\nimport { ReExport } from '../handlers/re-export.js';\nimport type { ImportNameSpec, ObjectSetting } from '../types.js';\nimport { createEmitBlocks, type EmitBlocksOption } from './create-emit-blocks.js';\n\ntype ConfigFieldSetting = Partial<Omit<ObjectSetting, 'name'>>;\ntype DecorateElement = {\n isMatchField: (s: string) => boolean;\n isMatchType: (s: string) => boolean;\n from: string;\n name: string;\n arguments?: string[];\n namedImport: boolean;\n defaultImport?: string | true;\n namespaceImport?: string;\n};\ntype CustomImport = {\n from: string;\n name: string;\n namedImport: boolean;\n defaultImport?: string | true;\n namespaceImport?: string;\n};\n\nexport function createConfig(data: Record<string, unknown>) {\n const config = merge({}, unflatten(data, { delimiter: '_' })) as Record<\n string,\n unknown\n >;\n const $warnings: string[] = [];\n\n const configOutputFilePattern = String(\n config.outputFilePattern || `{model}/{name}.{type}.ts`,\n );\n\n let outputFilePattern = filenamify(configOutputFilePattern, {\n replacement: '/',\n })\n .replaceAll('..', '/')\n .replaceAll(/\\/+/g, '/');\n outputFilePattern = trim(outputFilePattern, '/');\n\n if (outputFilePattern !== configOutputFilePattern) {\n $warnings.push(\n `Due to invalid filepath 'outputFilePattern' changed to '${outputFilePattern}'`,\n );\n }\n\n if (config.reExportAll) {\n $warnings.push(`Option 'reExportAll' is deprecated, use 'reExport' instead`);\n if (toBoolean(config.reExportAll)) {\n config.reExport = 'All';\n }\n }\n\n const fields: Record<string, ConfigFieldSetting | undefined> = Object.fromEntries(\n Object.entries<Dictionary<string | undefined>>(\n (config.fields ?? {}) as Record<string, Dictionary<string | undefined>>,\n )\n .filter(({ 1: value }) => typeof value === 'object')\n .map(([name, value]) => {\n const fieldSetting: ConfigFieldSetting = {\n arguments: [],\n output: toBoolean(value.output),\n input: toBoolean(value.input),\n model: toBoolean(value.model),\n from: value.from,\n defaultImport: toBoolean(value.defaultImport) ? true : value.defaultImport,\n namespaceImport: value.namespaceImport,\n };\n return [name, fieldSetting];\n }),\n );\n\n const decorate: DecorateElement[] = [];\n const configDecorate: (Record<string, string> | undefined)[] = Object.values(\n (config.decorate as Record<string, Record<string, string> | undefined>) || {},\n );\n\n for (const element of configDecorate) {\n if (!element) continue;\n ok(\n element.from && element.name,\n `Missed 'from' or 'name' part in configuration for decorate`,\n );\n decorate.push({\n isMatchField: outmatch(element.field, { separator: false }),\n isMatchType: outmatch(element.type, { separator: false }),\n from: element.from,\n name: element.name,\n namedImport: toBoolean(element.namedImport),\n defaultImport: toBoolean(element.defaultImport) ? true : element.defaultImport,\n namespaceImport: element.namespaceImport,\n arguments: element.arguments ? JSON5.parse(element.arguments) : undefined,\n });\n }\n\n const customImport: CustomImport[] = [];\n const configCustomImport: (Record<string, string> | undefined)[] = Object.values(\n (config.customImport as Record<string, Record<string, string> | undefined>) || {},\n );\n for (const element of configCustomImport) {\n if (!element) continue;\n ok(\n element.from && element.name,\n `Missed 'from' or 'name' part in configuration for customImport`,\n );\n customImport.push({\n from: element.from,\n name: element.name,\n namedImport: toBoolean(element.namedImport),\n defaultImport: toBoolean(element.defaultImport) ? true : element.defaultImport,\n namespaceImport: element.namespaceImport,\n });\n }\n return {\n outputFilePattern,\n tsConfigFilePath: createTsConfigFilePathValue(config.tsConfigFilePath),\n prismaClientImport: createPrismaImport(config.prismaClientImport),\n combineScalarFilters: toBoolean(config.combineScalarFilters),\n noAtomicOperations: toBoolean(config.noAtomicOperations),\n reExport: (ReExport[String(config.reExport) as keyof typeof ReExport] || ReExport.None) as ReExport,\n emitSingle: toBoolean(config.emitSingle),\n emitCompiled: toBoolean(config.emitCompiled),\n emitBlocks: createEmitBlocks(config.emitBlocks as EmitBlocksOption[]),\n omitModelsCount: toBoolean(config.omitModelsCount),\n $warnings,\n fields,\n purgeOutput: toBoolean(config.purgeOutput),\n useInputType: createUseInputType(config.useInputType as Record<string, ConfigInputItem>),\n noTypeId: toBoolean(config.noTypeId),\n requireSingleFieldsInWhereUniqueInput: toBoolean(\n config.requireSingleFieldsInWhereUniqueInput,\n ),\n unsafeCompatibleWhereUniqueInput: toBoolean(\n config.unsafeCompatibleWhereUniqueInput,\n ),\n graphqlScalars: (config.graphqlScalars || {}) as Record<\n string,\n ImportNameSpec | undefined\n >,\n decorate,\n customImport,\n esmCompatible: toBoolean(config.esmCompatible),\n };\n}\n\ntype ConfigInputItem = {\n typeName: string;\n ALL?: string;\n [index: string]: string | undefined;\n};\n\nconst tsConfigFileExists = memoize((filePath: string) => {\n return existsSync(filePath);\n});\n\nfunction createTsConfigFilePathValue(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n if (tsConfigFileExists('tsconfig.json')) return 'tsconfig.json';\n}\n\nfunction createPrismaImport(value: unknown): string {\n if (typeof value === 'string') return value;\n return '@prisma/client';\n}\n\nfunction createUseInputType(data?: Record<string, ConfigInputItem>) {\n if (!data) {\n return [];\n }\n const result: ConfigInputItem[] = [];\n for (const [typeName, useInputs] of Object.entries(data)) {\n const entry: ConfigInputItem = {\n typeName,\n ALL: undefined,\n };\n if (useInputs.ALL) {\n entry.ALL = useInputs.ALL;\n delete useInputs.ALL;\n }\n\n for (const [propertyName, pattern] of Object.entries(useInputs)) {\n entry[propertyName] = pattern;\n }\n\n result.push(entry);\n }\n return result;\n}\n\nfunction toBoolean(value: unknown) {\n return ['true', '1', 'on'].includes(String(value));\n}\n","import { kebabCase } from 'lodash-es';\nimport pluralize from 'pluralize';\nimport pupa from 'pupa';\n\nexport function generateFileName(args: {\n type: string;\n name: string;\n getModelName(name: string): string | undefined;\n template: string;\n}) {\n const { getModelName, name, template, type } = args;\n\n return pupa(template, {\n get model() {\n const result = getModelName(name) || 'prisma';\n return kebabCase(result);\n },\n get name() {\n let result = kebabCase(name);\n\n for (const suffix of ['input', 'args', 'enum']) {\n const ending = `-${suffix}`;\n if (type === suffix && result.endsWith(ending)) {\n result = result.slice(0, -ending.length);\n }\n }\n return result;\n },\n plural: {\n get type() {\n return pluralize(type);\n },\n },\n type,\n });\n}\n","import type { Project } from 'ts-morph';\n\nimport type { EventEmitter } from '../types.js';\nimport { generateFileName } from './generate-file-name.js';\n\nexport function factoryGetSourceFile(args: {\n output: string;\n outputFilePattern: string;\n project: Project;\n getModelName(name: string): string | undefined;\n eventEmitter: EventEmitter;\n}) {\n const { outputFilePattern, output, getModelName, project } = args;\n\n return function getSourceFile(args: { type: string; name: string }) {\n const { name, type } = args;\n let filePath = generateFileName({\n getModelName,\n name,\n type,\n template: outputFilePattern,\n });\n filePath = `${output}/${filePath}`;\n\n return (\n project.getSourceFile(filePath) ||\n project.createSourceFile(filePath, undefined, { overwrite: true })\n );\n };\n}\n","import { memoize } from 'lodash-es';\n\nexport function createGetModelName(\n modelNames: string[],\n): (name: string) => string | undefined {\n return memoize(tryGetName);\n\n function tryGetName(name: string): string | undefined {\n return getModelName({ modelNames, name });\n }\n}\n\nfunction getModelName(args: {\n name: string;\n modelNames: string[];\n}): string | undefined {\n const { modelNames, name } = args;\n for (const keyword of splitKeywords) {\n const [test] = name.split(keyword, 1);\n if (modelNames.includes(test)) {\n return test;\n }\n }\n for (const keyword of endsWithKeywords) {\n const [test] = name.split(keyword).slice(-1);\n if (modelNames.includes(test)) {\n return test;\n }\n }\n for (const [start, end] of middleKeywords) {\n let test = name.slice(start.length).slice(0, -end.length);\n if (modelNames.includes(test) && name.startsWith(start) && name.endsWith(end)) {\n return test;\n }\n test = name.slice(0, -(start + end).length);\n if (modelNames.includes(test) && name.endsWith(start + end)) {\n return test;\n }\n }\n\n // test for {Model}{UniqueName}CompoundUniqueInput\n if (name.slice(-19) === 'CompoundUniqueInput') {\n const test = name.slice(0, -19);\n const models = modelNames\n .filter(x => test.startsWith(x))\n .sort((a, b) => b.length - a.length);\n return models[0];\n }\n\n // test for {Model}Count\n if (name.slice(-5) === 'Count') {\n const test = name.slice(0, -5);\n if (modelNames.includes(test)) {\n return test;\n }\n }\n}\n\nconst splitKeywords = [\n 'CreateInput',\n 'CreateMany',\n 'CreateNested',\n 'CreateOneWithout',\n 'CreateOrConnect',\n 'CreateWithout',\n 'DistinctField',\n 'Filter',\n 'ManyWithout',\n 'OrderByInput',\n 'RelationFilter',\n 'NullableRelationFilter',\n 'ListRelationFilter',\n 'ScalarWhereInput',\n 'UpdateInput',\n 'UpdateMany',\n 'UpdateOneRequiredWithout',\n 'UpdateOneWithout',\n 'UpdateWith',\n 'UpsertWith',\n 'UpsertWithout',\n 'WhereInput',\n 'WhereUniqueInput',\n 'AvgAggregate',\n 'SumAggregate',\n 'MinAggregate',\n 'MaxAggregate',\n 'CountAggregate',\n 'ScalarField',\n 'GroupBy',\n 'OrderBy',\n 'UncheckedUpdate',\n 'UncheckedCreate',\n 'ScalarWhere',\n 'CountOutputType',\n 'CountOrderBy',\n 'SumOrderBy',\n 'MinOrderBy',\n 'MaxOrderBy',\n 'AvgOrderBy',\n 'Create',\n 'Update',\n 'ScalarRelationFilter',\n 'NullableScalarRelationFilter',\n].sort((a, b) => b.length - a.length);\n\nconst endsWithKeywords = [\n 'Aggregate',\n 'GroupBy',\n 'CreateOne',\n 'CreateMany',\n 'DeleteMany',\n 'DeleteOne',\n 'FindMany',\n 'FindOne',\n 'FindUnique',\n 'UpdateMany',\n 'UpdateOne',\n 'UpsertOne',\n];\n\nconst middleKeywords = [\n ['FindFirst', 'OrThrowArgs'],\n ['FindUnique', 'OrThrowArgs'],\n ['Aggregate', 'Args'],\n ['CreateOne', 'Args'],\n ['CreateMany', 'Args'],\n ['DeleteMany', 'Args'],\n ['DeleteOne', 'Args'],\n ['FindMany', 'Args'],\n ['FindFirst', 'Args'],\n ['FindOne', 'Args'],\n ['FindUnique', 'Args'],\n ['UpdateMany', 'Args'],\n ['UpdateMany', 'AndReturnOutputType'],\n ['UpdateOne', 'Args'],\n ['UpsertOne', 'Args'],\n ['GroupBy', 'Args'],\n ['OrderBy', 'Args'],\n];\n","import type { GeneratorOptions } from '@prisma/generator-helper';\nimport { ok } from 'node:assert';\nimport { createRequire } from 'node:module';\nimport { mapKeys } from 'lodash-es';\nimport { Project, QuoteKind } from 'ts-morph';\n\n// Use createRequire for CommonJS module compatibility in ESM\nconst requireCjs = createRequire(import.meta.url);\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\nconst AwaitEventEmitter = requireCjs('await-event-emitter').default;\n\nimport { argsType } from './handlers/args-type.js';\nimport { combineScalarFilters } from './handlers/combine-scalar-filters.js';\nimport { createAggregateInput } from './handlers/create-aggregate-input.js';\nimport { emitSingle } from './handlers/emit-single.js';\nimport { generateFiles } from './handlers/generate-files.js';\nimport { inputType } from './handlers/input-type.js';\nimport { modelData } from './handlers/model-data.js';\nimport { modelOutputType } from './handlers/model-output-type.js';\nimport { noAtomicOperations } from './handlers/no-atomic-operations.js';\nimport { outputType } from './handlers/output-type.js';\nimport { purgeOutput } from './handlers/purge-output.js';\nimport { ReExport, reExport } from './handlers/re-export.js';\nimport { registerEnum } from './handlers/register-enum.js';\nimport { generateRegisterAllTypes } from './handlers/register-all-types.js';\nimport { requireSingleFieldsInWhereUniqueInput } from './handlers/require-single-fields-in-whereunique-input.js';\nimport { generateTypeRegistry } from './handlers/type-registry.js';\nimport { warning } from './handlers/warning.js';\nimport { createConfig } from './helpers/create-config.js';\nimport {\n buildDependencyGraph,\n detectCircularDependencies,\n} from './helpers/detect-circular-deps.js';\nimport { factoryGetSourceFile } from './helpers/factory-get-source-file.js';\nimport { createGetModelName } from './helpers/get-model-name.js';\nimport type {\n Document,\n EventArguments,\n EventEmitter,\n Field,\n Model,\n ObjectSettings,\n OutputType,\n} from './types.js';\n\nexport async function generate(\n args: GeneratorOptions & {\n skipAddOutputSourceFiles?: boolean;\n connectCallback?: (\n emitter: EventEmitter,\n eventArguments: EventArguments,\n ) => void | Promise<void>;\n },\n) {\n const { connectCallback, dmmf, generator, skipAddOutputSourceFiles } = args;\n\n const generatorOutputValue = generator.output?.value;\n ok(generatorOutputValue, 'Missing generator configuration: output');\n\n const config = createConfig(generator.config);\n\n const eventEmitter = new AwaitEventEmitter() as EventEmitter;\n eventEmitter.on('Warning', warning);\n config.emitBlocks.models && eventEmitter.on('Model', modelData);\n if (config.emitBlocks.prismaEnums || config.emitBlocks.schemaEnums) {\n eventEmitter.on('EnumType', registerEnum);\n }\n if (\n config.emitBlocks.outputs ||\n (config.emitBlocks.models && !config.omitModelsCount)\n ) {\n eventEmitter.on('OutputType', outputType);\n }\n config.emitBlocks.models && eventEmitter.on('ModelOutputType', modelOutputType);\n config.emitBlocks.outputs && eventEmitter.on('AggregateOutput', createAggregateInput);\n config.emitBlocks.inputs && eventEmitter.on('InputType', inputType);\n config.emitBlocks.args && eventEmitter.on('ArgsType', argsType);\n eventEmitter.on('GenerateFiles', generateFiles);\n\n for (const message of config.$warnings) {\n eventEmitter.emitSync('Warning', message);\n }\n\n const project = new Project({\n manipulationSettings: {\n quoteKind: QuoteKind.Single,\n },\n skipAddingFilesFromTsConfig: true,\n skipLoadingLibFiles: !config.emitCompiled,\n tsConfigFilePath: config.tsConfigFilePath,\n });\n\n if (!skipAddOutputSourceFiles) {\n project.addSourceFilesAtPaths([\n `${generatorOutputValue}/**/*.ts`,\n `!${generatorOutputValue}/**/*.d.ts`,\n ]);\n }\n\n config.combineScalarFilters && combineScalarFilters(eventEmitter);\n config.noAtomicOperations && noAtomicOperations(eventEmitter);\n config.reExport !== ReExport.None && reExport(eventEmitter);\n config.emitSingle && emitSingle(eventEmitter);\n config.purgeOutput && purgeOutput(eventEmitter);\n config.requireSingleFieldsInWhereUniqueInput &&\n requireSingleFieldsInWhereUniqueInput(eventEmitter);\n\n const models = new Map<string, Model>();\n const modelNames: string[] = [];\n const modelFields = new Map<string, Map<string, Field>>();\n const fieldSettings = new Map<string, Map<string, ObjectSettings>>();\n const getModelName = createGetModelName(modelNames);\n const getSourceFile = factoryGetSourceFile({\n eventEmitter,\n getModelName,\n output: generatorOutputValue,\n outputFilePattern: config.outputFilePattern,\n project,\n });\n const { datamodel, schema } = JSON.parse(JSON.stringify(dmmf)) as Document;\n const removeTypes = new Set<string>();\n\n // Build circular dependency detection for ESM compatibility\n const allModels = [...datamodel.models, ...(datamodel.types ?? [])] as Model[];\n const dependencyGraph = buildDependencyGraph(allModels);\n const circularDependencies = detectCircularDependencies(dependencyGraph);\n\n const eventArguments: EventArguments = {\n circularDependencies,\n classTransformerTypeModels: new Set(),\n config,\n enums: mapKeys(datamodel.enums, x => x.name),\n eventEmitter,\n fieldSettings,\n getModelName,\n getSourceFile,\n modelFields,\n modelNames,\n models,\n output: generatorOutputValue,\n project,\n removeTypes,\n schema,\n typeNames: new Set<string>(),\n };\n\n if (connectCallback) {\n await connectCallback(eventEmitter, eventArguments);\n }\n\n await eventEmitter.emit('Begin', eventArguments);\n\n // Generate type registry file for ESM compatibility\n // Must be after 'Begin' event since purgeOutput deletes all files on Begin\n if (config.esmCompatible) {\n generateTypeRegistry(eventArguments);\n }\n\n for (const model of datamodel.models) {\n await eventEmitter.emit('Model', model, eventArguments);\n }\n\n // Types behaves like model\n for (const model of datamodel.types ?? []) {\n await eventEmitter.emit('Model', model, eventArguments);\n }\n\n const { enumTypes, inputObjectTypes, outputObjectTypes } = schema;\n\n await eventEmitter.emit('PostBegin', eventArguments);\n\n for (const enumType of enumTypes.prisma.concat(enumTypes.model ?? [])) {\n await eventEmitter.emit('EnumType', enumType, eventArguments);\n }\n\n for (const outputTypeItem of outputObjectTypes.model) {\n await eventEmitter.emit('ModelOutputType', outputTypeItem, eventArguments);\n }\n\n const queryOutputTypes: OutputType[] = [];\n\n for (const outputTypeItem of outputObjectTypes.prisma) {\n if (['Query', 'Mutation'].includes(outputTypeItem.name)) {\n queryOutputTypes.push(outputTypeItem);\n continue;\n }\n await eventEmitter.emit('OutputType', outputTypeItem, eventArguments);\n }\n\n const inputTypes = (inputObjectTypes.prisma ?? []).concat(inputObjectTypes.model ?? []);\n\n for (const inputTypeItem of inputTypes) {\n const event = {\n ...eventArguments,\n classDecoratorName: 'InputType',\n fileType: 'input',\n inputType: inputTypeItem,\n };\n if (inputTypeItem.fields.length === 0) {\n removeTypes.add(inputTypeItem.name);\n continue;\n }\n await eventEmitter.emit('BeforeInputType', event);\n await eventEmitter.emit('InputType', event);\n }\n\n for (const outputTypeItem of queryOutputTypes) {\n for (const field of outputTypeItem.fields) {\n await eventEmitter.emit('ArgsType', field, eventArguments);\n }\n }\n\n // Generate register-all-types.ts for ESM compatibility\n // Must be after all types are generated so it can find all files with registerType()\n if (config.esmCompatible) {\n generateRegisterAllTypes(eventArguments);\n }\n\n await eventEmitter.emit('BeforeGenerateFiles', eventArguments);\n await eventEmitter.emit('GenerateFiles', eventArguments);\n await eventEmitter.emit('End', eventArguments);\n\n for (const name of Object.keys((eventEmitter as unknown as { _events: Record<string, unknown> })._events)) {\n eventEmitter.off(name);\n }\n}\n"]}