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

124 lines (123 loc) 5.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FieldProcessor = void 0; const helpers_1 = require("../../helpers/helpers"); const decorator_strategy_1 = require("../../decorators/decorator-strategy"); const field_classifiers_1 = require("../../field-classifiers"); class FieldProcessor { constructor(templateHelpers, customDecoratorConfigsPath) { this.templateHelpers = templateHelpers; this.customDecoratorConfigsPath = customDecoratorConfigsPath; this.helpers = new helpers_1.Helpers(new decorator_strategy_1.DecoratorStrategy(customDecoratorConfigsPath)); } hasImport(imports, decoratorToVerify = 'Expose') { return imports.some(({ destruct }) => destruct === null || destruct === void 0 ? void 0 : destruct.some((d) => typeof d === 'string' ? d === decoratorToVerify : Object.values(d).includes(decoratorToVerify))); } addImport(imports, from, destruct) { var _a; const existingImport = imports.find((imp) => imp.from === from); if (existingImport) { (_a = existingImport.destruct) === null || _a === void 0 ? void 0 : _a.push(...destruct); } else { imports.push({ from, destruct }); } } processFields(model, allModels, config, addExposePropertyDecorator) { let hasEnum = false; const imports = []; const apiExtraModels = []; const extraClasses = []; 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 = config.getFieldOverrides(field); if (config.fieldFilters.shouldSkipField(field)) { return result; } if (this.isRelationField(field)) { const relationResult = this.processRelationField(field, model, allModels, config, addExposePropertyDecorator, overrides); if (!relationResult) return result; helpers_1.Helpers.concatIntoArray(relationResult.imports, imports); helpers_1.Helpers.concatIntoArray(relationResult.extraClasses, extraClasses); helpers_1.Helpers.concatIntoArray(relationResult.apiExtraModels, apiExtraModels); Object.assign(overrides, relationResult.overrides); } if (relationScalarFieldNames.includes(name)) { return result; } if (config.optionalAnnotation && config.fieldFilters.shouldProcessOptional) { this.processOptionalField(field, config, overrides); } if (field.kind === 'enum') { hasEnum = true; } const decoratorImports = this.processCustomDecorators(field, this.customDecoratorConfigsPath); imports.push(...decoratorImports); if (addExposePropertyDecorator && !this.hasImport(imports)) { this.addImport(imports, 'class-transformer', ['Expose']); } return [...result, helpers_1.Helpers.mapDMMFToParsedField(field, overrides)]; }, []); return { fields, imports, extraClasses, apiExtraModels, hasEnum, }; } isRelationField(field) { return field.kind === 'object'; } processRelationField(field, model, allModels, config, addExposePropertyDecorator, overrides) { if (!(0, field_classifiers_1.isAnnotatedWithOneOf)(field, config.relationModifiers)) { return null; } const relationInputType = this.helpers.generateRelationInput({ field, model, allModels, templateHelpers: this.templateHelpers, preAndSuffixClassName: config.dtoNameGenerator, canCreateAnnotation: config.canCreateAnnotation, canConnectAnnotation: config.canConnectAnnotation, addExposePropertyDecorator, }); return { imports: relationInputType.imports, extraClasses: relationInputType.generatedClasses, apiExtraModels: relationInputType.apiExtraModels, overrides: { ...overrides, type: relationInputType.type, isList: false, }, }; } processOptionalField(field, config, overrides) { if (!config.optionalAnnotation || !config.fieldFilters.shouldProcessOptional) { return; } const isDtoOptional = (0, field_classifiers_1.isAnnotatedWith)(field, config.optionalAnnotation); if (isDtoOptional) { overrides.isRequired = false; } else if (config.fieldFilters.shouldProcessOptional(field)) { overrides.isRequired = config.fieldFilters.shouldProcessOptional(field); } } processCustomDecorators(field, customDecoratorConfigsPath) { const decoratorStrategy = new decorator_strategy_1.DecoratorStrategy(customDecoratorConfigsPath); const validDecorators = decoratorStrategy.getValidDecoratorAndImportsByDoc(field === null || field === void 0 ? void 0 : field.documentation); const decorators = decoratorStrategy.formatValidDecoratorResultToFromDestruct(validDecorators); return decorators; } } exports.FieldProcessor = FieldProcessor;