@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
40 lines (39 loc) • 1.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RelationFieldHelper = void 0;
const field_classifiers_1 = require("../field-classifiers");
class RelationFieldHelper {
static getRelationScalars(fields) {
const scalars = fields.flatMap(({ relationFromFields = [] }) => relationFromFields);
return scalars.reduce((result, scalar) => {
const related = fields
.filter(({ relationFromFields = [] }) => relationFromFields.includes(scalar))
.map(({ name }) => name);
return { ...result, [scalar]: related };
}, {});
}
static getRelationConnectInputFields({ field, allModels, }) {
if (!(0, field_classifiers_1.isRelation)(field)) {
throw new Error(`Can not resolve RelationConnectInputFields for field '${field.name}'. Not a relation field.`);
}
const relatedModel = allModels.find((m) => m.name === field.type);
if (!relatedModel) {
throw new Error(`Can not resolve RelationConnectInputFields for field '${field.name}'. Related model '${field.type}' unknown.`);
}
const foreignKeyFields = this.getForeignKeyFields(field, relatedModel);
const idFields = relatedModel.fields.filter(field_classifiers_1.isId);
const uniqueFields = relatedModel.fields.filter(field_classifiers_1.isUnique);
return new Set([...foreignKeyFields, ...idFields, ...uniqueFields]);
}
static getForeignKeyFields(field, relatedModel) {
const { relationToFields = [] } = field;
return relationToFields.map((relName) => {
const rf = relatedModel.fields.find((f) => f.name === relName);
if (!rf) {
throw new Error(`Can not find foreign key field '${relName}' on model '${relatedModel.name}'`);
}
return rf;
});
}
}
exports.RelationFieldHelper = RelationFieldHelper;