@addon24/eslint-config
Version:
ESLint configuration rules for WorldOfTextcraft projects - Centralized configuration for all project types
70 lines (60 loc) • 2.11 kB
JavaScript
export default {
meta: {
type: "problem",
docs: {
description: "Entity-DTOs müssen fromEntity-Methoden bereitstellen",
category: "Architecture",
recommended: true,
},
schema: [],
messages: {
missingFromEntityMethod: "Entity-DTO-Klasse '{{dtoName}}' muss eine statische fromEntity-Methode bereitstellen",
forbiddenCreateMethod: "Entity-DTO-Klasse '{{dtoName}}' darf keine create-Methode haben. Verwende stattdessen fromEntity-Methoden.",
},
},
create(context) {
const filename = context.getFilename();
// Prüfe, ob es sich um eine Entity-DTO-Datei handelt
const isEntityDtoFile = filename.includes("/dto/Entity/");
if (!isEntityDtoFile) {
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;
const methods = classNode.body.body.filter(member =>
member.type === "MethodDefinition" &&
member.static === true
);
const hasFromEntityMethod = methods.some(method =>
method.key?.name === "fromEntity"
);
const hasCreateMethod = methods.some(method =>
method.key?.name === "create"
);
// Request-DTOs sind von der fromEntity-Regel ausgenommen
const isRequestDto = filename.includes("/dto/Request/");
if (!isRequestDto) {
if (!hasFromEntityMethod) {
context.report({ node: classNode, messageId: "missingFromEntityMethod", data: { dtoName: dtoClassName } });
}
if (hasCreateMethod) {
context.report({ node: classNode, messageId: "forbiddenCreateMethod", data: { dtoName: dtoClassName } });
}
}
},
};
},
};