UNPKG

@weverson_na/prisma-generator-nestjs-dto

Version:

Advanced Prisma Generator with Smart Merge v2: Creates DTO and Entity classes with AST-based preservation, intelligent import management, and modular architecture for NestJS

71 lines (70 loc) 3.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.computeEntityParams = void 0; const annotations_1 = require("../annotations"); const field_classifiers_1 = require("../field-classifiers"); const helpers_1 = require("../helpers"); const computeEntityParams = ({ model, allModels, templateHelpers, }) => { const imports = []; const apiExtraModels = []; const relationScalarFields = helpers_1.Helpers.getRelationScalars(model.fields); const relationScalarFieldNames = Object.keys(relationScalarFields); const fields = model.fields.reduce((result, field) => { const { name } = field; const overrides = { isRequired: true, isNullable: !field.isRequired, }; if ((0, field_classifiers_1.isAnnotatedWith)(field, annotations_1.DTO_ENTITY_HIDDEN)) return result; if ((0, field_classifiers_1.isRelation)(field)) { overrides.isRequired = false; overrides.isNullable = field.isList ? false : field.isRequired ? false : !(0, field_classifiers_1.isAnnotatedWith)(field, annotations_1.DTO_RELATION_REQUIRED); if (field.type !== model.name) { const modelToImportFrom = allModels.find(({ name }) => name === field.type); if (!modelToImportFrom) throw new Error(`related model '${field.type}' for '${model.name}.${field.name}' not found`); const importName = templateHelpers.entityName(field.type); const relPath = helpers_1.Helpers.getRelativePath(model.output.entity, modelToImportFrom.output.entity); const importFrom = `${relPath}/${templateHelpers.entityFilename(field.type)}`; if (!imports.some((item) => Array.isArray(item.destruct) && item.destruct.includes(importName) && item.from === importFrom)) { imports.push({ destruct: [importName], from: importFrom, }); } } } if (relationScalarFieldNames.includes(name)) { const { [name]: relationNames } = relationScalarFields; const isAnyRelationRequired = relationNames.some((relationFieldName) => { const relationField = model.fields.find((anyField) => anyField.name === relationFieldName); if (!relationField) return false; return ((0, field_classifiers_1.isRequired)(relationField) || (0, field_classifiers_1.isAnnotatedWith)(relationField, annotations_1.DTO_RELATION_REQUIRED)); }); overrides.isRequired = true; overrides.isNullable = !isAnyRelationRequired; } return [...result, helpers_1.Helpers.mapDMMFToParsedField(field, overrides)]; }, []); if (apiExtraModels.length) imports.unshift({ from: '@nestjs/swagger', destruct: ['ApiExtraModels'] }); const importPrismaClient = helpers_1.Helpers.makeImportsFromPrismaClient(fields); if (importPrismaClient) imports.unshift(importPrismaClient); return { model, fields, imports: helpers_1.Helpers.zipImportStatementParams(imports), apiExtraModels, }; }; exports.computeEntityParams = computeEntityParams;