UNPKG

@addon24/eslint-config

Version:

ESLint configuration rules for WorldOfTextcraft projects - Centralized configuration for all project types

82 lines (70 loc) 2.58 kB
const enforceNonEntityDtoCreateRule = { meta: { type: "problem", docs: { description: "Non-Entity-DTOs müssen create-Methoden bereitstellen und dürfen keine fromEntity-Methoden haben", category: "Architecture", recommended: true, }, schema: [], messages: { missingCreateMethod: "Non-Entity-DTO-Klasse '{{dtoName}}' muss eine statische create-Methode bereitstellen", forbiddenOtherMethods: "Non-Entity-DTO-Klasse '{{dtoName}}' darf nur create-Methoden haben. Andere statische Methoden sind verboten.", }, }, create(context) { const filename = context.getFilename(); // Prüfe, ob es sich um eine Non-Entity-DTO-Datei handelt const isNonEntityDtoFile = filename.includes("/dto/") && !filename.includes("/dto/Entity/"); if (!isNonEntityDtoFile) { return {}; } let classNode = null; let dtoClassName = ""; return { ClassDeclaration(node) { classNode = node; dtoClassName = node.id?.name; }, ExportDefaultDeclaration(node) { if (node.declaration.type === "ClassDeclaration") { classNode = node.declaration; dtoClassName = node.declaration.id?.name; } }, "Program:exit"(node) { if (!classNode || !dtoClassName) return; // Ausnahme für BaseEntityDto (abstrakte Base-Klasse) if (dtoClassName === "BaseEntityDto" && filename.endsWith("/dto/BaseEntityDto.ts")) { return; } const methods = classNode.body.body.filter(member => member.type === "MethodDefinition" && member.static === true ); const hasCreateMethod = methods.some(method => method.key?.name === "create" ); // Request-DTOs sind von der create-Regel ausgenommen const isRequestDto = filename.includes("/dto/Request/"); if (!isRequestDto) { if (!hasCreateMethod) { context.report({ node: classNode, messageId: "missingCreateMethod", data: { dtoName: dtoClassName } }); } const allowedMethods = ["create"]; const forbiddenMethods = methods.filter(method => method.key?.name && !allowedMethods.includes(method.key.name) ); forbiddenMethods.forEach(method => { context.report({ node: method, messageId: "forbiddenOtherMethods", data: { dtoName: dtoClassName } }); }); } } }; }, }; export default { rules: { "enforce-nonentity-dto-create": enforceNonEntityDtoCreateRule, }, };