@echoes-of-order/eslint-config 1.121.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/CHANGELOG.md +1093 -0
  2. package/configs/.gitkeep +1 -0
  3. package/configs/admin.js +203 -0
  4. package/configs/api-client.js +46 -0
  5. package/configs/backend.js +895 -0
  6. package/configs/domains.js +123 -0
  7. package/configs/frontend.js +30 -0
  8. package/configs/image-server.js +26 -0
  9. package/configs/ionos-proxy.js +372 -0
  10. package/configs/nestjs.js +156 -0
  11. package/configs/node.js +92 -0
  12. package/configs/react.js +111 -0
  13. package/configs/wiki.js +42 -0
  14. package/index.js +39 -0
  15. package/package.json +85 -0
  16. package/rules/.gitkeep +1 -0
  17. package/rules/__tests__/analyze-relation-usage.test.js.disabled +300 -0
  18. package/rules/__tests__/complexity.test.js.disabled +300 -0
  19. package/rules/__tests__/enforce-dto-factory-in-services.integration.test.js +226 -0
  20. package/rules/__tests__/enforce-dto-factory-in-services.test.js +177 -0
  21. package/rules/__tests__/enforce-entity-dto-create-no-id.integration.test.js +18 -0
  22. package/rules/__tests__/enforce-function-argument-count.test.js.disabled +300 -0
  23. package/rules/__tests__/enforce-repository-token-handling.test.js +58 -0
  24. package/rules/__tests__/english-only-code-strings.test.js.disabled +300 -0
  25. package/rules/__tests__/eslint-rules.integration.test.ts +350 -0
  26. package/rules/__tests__/integration-test-controller-response-dto.js +261 -0
  27. package/rules/__tests__/integration-test-dto-factory-in-services.js +260 -0
  28. package/rules/__tests__/integration-test-no-entity-type-casting.js +161 -0
  29. package/rules/__tests__/integration-test-typeorm-naming-conventions.js +501 -0
  30. package/rules/__tests__/test-config.js +33 -0
  31. package/rules/admin-controller-security.js +180 -0
  32. package/rules/analyze-relation-usage.js +687 -0
  33. package/rules/api-response-dto.js +174 -0
  34. package/rules/auth-guard-required.js +142 -0
  35. package/rules/backend-specific.js +36 -0
  36. package/rules/best-practices.js +421 -0
  37. package/rules/complexity.js +20 -0
  38. package/rules/controller-architecture.js +340 -0
  39. package/rules/controller-naming-conventions.js +190 -0
  40. package/rules/controller-readonly-restriction.js +148 -0
  41. package/rules/controller-swagger-complete.js +312 -0
  42. package/rules/controller-swagger-docs.js +119 -0
  43. package/rules/controller-swagger-english.js +320 -0
  44. package/rules/coordinate-naming.js +132 -0
  45. package/rules/custom-mui-button.js +135 -0
  46. package/rules/dead-code-detection-backend.js +50 -0
  47. package/rules/dead-code-detection-frontend.js +48 -0
  48. package/rules/dead-code-detection.js +71 -0
  49. package/rules/debug-controller-response-dto.js +79 -0
  50. package/rules/deprecate.js +8 -0
  51. package/rules/dto-annotation-property-consistency.js +111 -0
  52. package/rules/dto-entity-mapping-completeness.js +688 -0
  53. package/rules/dto-entity-swagger-separation.js +265 -0
  54. package/rules/dto-entity-type-consistency.js +352 -0
  55. package/rules/dto-entity-type-matching.js +519 -0
  56. package/rules/dto-naming-convention.js +98 -0
  57. package/rules/dto-visibility-modifiers.js +159 -0
  58. package/rules/enforce-api-versioning.js +122 -0
  59. package/rules/enforce-app-module-registration.js +179 -0
  60. package/rules/enforce-basecontroller.js +152 -0
  61. package/rules/enforce-body-request-dto.js +141 -0
  62. package/rules/enforce-controller-response-dto.js +349 -0
  63. package/rules/enforce-custom-error-classes.js +242 -0
  64. package/rules/enforce-database-transaction-safety.js +179 -0
  65. package/rules/enforce-dto-constructor.js +95 -0
  66. package/rules/enforce-dto-create-parameter-types.js +170 -0
  67. package/rules/enforce-dto-create-pattern.js +274 -0
  68. package/rules/enforce-dto-entity-creation.js +164 -0
  69. package/rules/enforce-dto-factory-in-services.js +188 -0
  70. package/rules/enforce-dto-from-entity-method.js +47 -0
  71. package/rules/enforce-dto-from-entity.js +314 -0
  72. package/rules/enforce-dto-naming-conventions.js +212 -0
  73. package/rules/enforce-dto-naming.js +176 -0
  74. package/rules/enforce-dto-usage-simple.js +114 -0
  75. package/rules/enforce-dto-usage.js +407 -0
  76. package/rules/enforce-eager-translation-loading.js +178 -0
  77. package/rules/enforce-entity-creation-pattern.js +137 -0
  78. package/rules/enforce-entity-dto-convert-method.js +157 -0
  79. package/rules/enforce-entity-dto-create-no-id.js +117 -0
  80. package/rules/enforce-entity-dto-extends-base.js +141 -0
  81. package/rules/enforce-entity-dto-from-request-dto-structure.js +113 -0
  82. package/rules/enforce-entity-dto-fromentity-complex.js +69 -0
  83. package/rules/enforce-entity-dto-fromentity-simple.js +69 -0
  84. package/rules/enforce-entity-dto-fromrequestdto-structure.js +262 -0
  85. package/rules/enforce-entity-dto-methods-restriction.js +159 -0
  86. package/rules/enforce-entity-dto-no-request-dto.js +102 -0
  87. package/rules/enforce-entity-dto-optional-auto-fields.js +101 -0
  88. package/rules/enforce-entity-dto-required-methods.js +248 -0
  89. package/rules/enforce-entity-factory-pattern.js +180 -0
  90. package/rules/enforce-entity-instantiation-in-toentity.js +125 -0
  91. package/rules/enforce-enum-for-playable-entities.js +95 -0
  92. package/rules/enforce-error-handling.js +257 -0
  93. package/rules/enforce-explicit-dto-types.js +118 -0
  94. package/rules/enforce-from-request-dto-usage.js +62 -0
  95. package/rules/enforce-generic-entity-dto.js +71 -0
  96. package/rules/enforce-inject-decorator.js +133 -0
  97. package/rules/enforce-lazy-type-loading.js +170 -0
  98. package/rules/enforce-module-existence.js +157 -0
  99. package/rules/enforce-nonentity-dto-create.js +107 -0
  100. package/rules/enforce-playable-entity-naming.js +108 -0
  101. package/rules/enforce-repository-token-handling.js +92 -0
  102. package/rules/enforce-request-dto-no-entity-dto.js +201 -0
  103. package/rules/enforce-request-dto-required-fields.js +217 -0
  104. package/rules/enforce-result-pattern.js +45 -0
  105. package/rules/enforce-service-relation-loading.js +116 -0
  106. package/rules/enforce-test-coverage.js +96 -0
  107. package/rules/enforce-toentity-conditional-assignment.js +132 -0
  108. package/rules/enforce-translations-required.js +203 -0
  109. package/rules/enforce-typeorm-naming-conventions.js +366 -0
  110. package/rules/enforce-vite-health-metrics.js +240 -0
  111. package/rules/entity-required-properties.js +321 -0
  112. package/rules/entity-to-dto-test.js +73 -0
  113. package/rules/enum-database-validation.js +149 -0
  114. package/rules/errors.js +190 -0
  115. package/rules/es6.js +204 -0
  116. package/rules/eslint-plugin-no-comments.js +44 -0
  117. package/rules/filename-class-name-match.js +62 -0
  118. package/rules/forbid-fromentity-outside-entity-folder.js +237 -0
  119. package/rules/function-params-newline.js +111 -0
  120. package/rules/imports.js +264 -0
  121. package/rules/jest.js +13 -0
  122. package/rules/jsx.js +16 -0
  123. package/rules/max-classes-per-file.js +49 -0
  124. package/rules/multiline-formatting.js +146 -0
  125. package/rules/no-blank-lines-between-decorators-and-properties.js +95 -0
  126. package/rules/no-comments.js +62 -0
  127. package/rules/no-dto-constructors.js +126 -0
  128. package/rules/no-dto-default-values.js +220 -0
  129. package/rules/no-dto-duplicates.js +127 -0
  130. package/rules/no-dto-in-entity.js +99 -0
  131. package/rules/no-dynamic-import-in-types.js +71 -0
  132. package/rules/no-dynamic-imports-in-controllers.js +95 -0
  133. package/rules/no-entity-imports-in-controllers.js +101 -0
  134. package/rules/no-entity-in-swagger-docs.js +139 -0
  135. package/rules/no-entity-type-casting.js +104 -0
  136. package/rules/no-fetch.js +77 -0
  137. package/rules/no-import-meta-env.js +151 -0
  138. package/rules/no-inline-styles.js +5 -0
  139. package/rules/no-magic-values.js +85 -0
  140. package/rules/no-partial-type.js +168 -0
  141. package/rules/no-relative-imports.js +31 -0
  142. package/rules/no-tsyringe.js +181 -0
  143. package/rules/no-type-assertion.js +175 -0
  144. package/rules/no-undefined-entity-properties.js +121 -0
  145. package/rules/node.js +44 -0
  146. package/rules/perfectionist.js +50 -0
  147. package/rules/performance-minimal.js +155 -0
  148. package/rules/performance.js +44 -0
  149. package/rules/pino-logger-format.js +200 -0
  150. package/rules/prefer-dto-classes.js +112 -0
  151. package/rules/prefer-dto-create-method.js +225 -0
  152. package/rules/promises.js +17 -0
  153. package/rules/react-hooks.js +15 -0
  154. package/rules/react.js +28 -0
  155. package/rules/regexp.js +70 -0
  156. package/rules/require-dto-response.js +81 -0
  157. package/rules/require-valid-relations.js +388 -0
  158. package/rules/result-pattern.js +162 -0
  159. package/rules/security.js +37 -0
  160. package/rules/service-architecture.js +148 -0
  161. package/rules/sonarjs.js +26 -0
  162. package/rules/strict.js +7 -0
  163. package/rules/style.js +611 -0
  164. package/rules/stylistic.js +93 -0
  165. package/rules/typeorm-column-type-validation.js +224 -0
  166. package/rules/typescript-advanced.js +113 -0
  167. package/rules/typescript-core.js +111 -0
  168. package/rules/typescript.js +146 -0
  169. package/rules/unicorn.js +168 -0
  170. package/rules/variables.js +51 -0
  171. package/rules/websocket-architecture.js +115 -0
@@ -0,0 +1,895 @@
1
+ /**
2
+ * Backend ESLint Configuration
3
+ *
4
+ * Ursprüngliche Backend-Konfiguration - 1:1 übernommen
5
+ * Enthält alle Backend-spezifischen Regeln und benutzerdefinierten Regeln
6
+ */
7
+
8
+ import stylisticPlugin from "@stylistic/eslint-plugin";
9
+
10
+ import typescriptEslint from "@typescript-eslint/eslint-plugin";
11
+ import typescriptParser from "@typescript-eslint/parser";
12
+ import deprecatePlugin from "eslint-plugin-deprecate";
13
+ import importPlugin from "eslint-plugin-import";
14
+ import jestPlugin from "eslint-plugin-jest";
15
+ import perfectionist from "eslint-plugin-perfectionist";
16
+ import sonarjsPlugin from "eslint-plugin-sonarjs";
17
+ import globals from "globals";
18
+ import path from "path";
19
+
20
+ // Importiere alle ursprünglichen Regeldateien
21
+ import adminControllerSecurityRules from '../rules/admin-controller-security.js';
22
+ import analyzeRelationUsageRule from '../rules/analyze-relation-usage.js';
23
+ import authGuardRequiredRule from '../rules/auth-guard-required.js';
24
+ import bestPracticesRules from '../rules/best-practices.js';
25
+ import controllerArchitectureRules from '../rules/controller-architecture.js';
26
+ import controllerNamingConventionsRule from '../rules/controller-naming-conventions.js';
27
+ import controllerReadonlyRestrictionRules from '../rules/controller-readonly-restriction.js';
28
+ import controllerSwaggerCompleteRule from '../rules/controller-swagger-complete.js';
29
+ import controllerSwaggerDocsRule from '../rules/controller-swagger-docs.js';
30
+ import controllerSwaggerEnglishRule from '../rules/controller-swagger-english.js';
31
+ import coordinateNamingRule from '../rules/coordinate-naming.js';
32
+ import deadCodeDetectionRules from '../rules/dead-code-detection-backend.js';
33
+ import deprecatedRules from '../rules/deprecate.js';
34
+ import dtoAnnotationPropertyConsistencyRule from '../rules/dto-annotation-property-consistency.js';
35
+ import dtoEntityMappingCompletenessRule from '../rules/dto-entity-mapping-completeness.js';
36
+ import dtoEntitySwaggerSeparationRule from '../rules/dto-entity-swagger-separation.js';
37
+ import dtoEntityTypeConsistencyRule from '../rules/dto-entity-type-consistency.js';
38
+ import dtoEntityTypeMatchingRule from '../rules/dto-entity-type-matching.js';
39
+ import dtoVisibilityModifiersRule from '../rules/dto-visibility-modifiers.js';
40
+ import enforceApiVersioning from '../rules/enforce-api-versioning.js';
41
+ import enforceAppModuleRegistration from '../rules/enforce-app-module-registration.js';
42
+ import enforceBaseControllerRule from '../rules/enforce-basecontroller.js';
43
+ import enforceBodyRequestDtoRule from '../rules/enforce-body-request-dto.js';
44
+ import enforceControllerResponseDtoRule from '../rules/enforce-controller-response-dto.js';
45
+ import enforceCustomErrorClassesRule from '../rules/enforce-custom-error-classes.js';
46
+ import enforceDtoConstructorRule from '../rules/enforce-dto-constructor.js';
47
+ import enforceDtoCreateParameterTypesRule from '../rules/enforce-dto-create-parameter-types.js';
48
+ import enforceDtoCreatePatternRule from '../rules/enforce-dto-create-pattern.js';
49
+ import enforceDtoEntityCreationRule from '../rules/enforce-dto-entity-creation.js';
50
+ import enforceDtoFactoryInServicesRule from '../rules/enforce-dto-factory-in-services.js';
51
+ import enforceDtoFromEntity from '../rules/enforce-dto-from-entity.js';
52
+ import enforceDtoNamingConventions from '../rules/enforce-dto-naming-conventions.js';
53
+ import enforceDtoNamingRule from '../rules/enforce-dto-naming.js';
54
+ import enforceDtoUsageRule from '../rules/enforce-dto-usage.js';
55
+ import enforceEagerTranslationLoadingRule from '../rules/enforce-eager-translation-loading.js';
56
+ import enforceEntityCreationPatternRule from '../rules/enforce-entity-creation-pattern.js';
57
+ import enforceEntityDtoConvertMethodRule from '../rules/enforce-entity-dto-convert-method.js';
58
+ import enforceEntityDtoCreateNoIdRule from '../rules/enforce-entity-dto-create-no-id.js';
59
+ import enforceEntityDtoExtendsBaseRule from '../rules/enforce-entity-dto-extends-base.js';
60
+ import enforceEntityDtoFromRequestDtoStructureRule from '../rules/enforce-entity-dto-from-request-dto-structure.js';
61
+ import enforceEntityDtoNoRequestDto from '../rules/enforce-entity-dto-no-request-dto.js';
62
+ import enforceEntityDtoOptionalAutoFieldsRule from '../rules/enforce-entity-dto-optional-auto-fields.js';
63
+ import enforceEntityFactoryPatternRule from '../rules/enforce-entity-factory-pattern.js';
64
+ import enforceEntityInstantiationInToEntityRule from '../rules/enforce-entity-instantiation-in-toentity.js';
65
+ import enforceEnumForPlayableEntitiesRule from '../rules/enforce-enum-for-playable-entities.js';
66
+ import enforceErrorHandling from '../rules/enforce-error-handling.js';
67
+ import enforceExplicitDtoTypesRule from '../rules/enforce-explicit-dto-types.js';
68
+ import enforceFromRequestDtoUsageRule from '../rules/enforce-from-request-dto-usage.js';
69
+ import enforceInjectDecoratorRule from '../rules/enforce-inject-decorator.js';
70
+ import enforceLazyTypeLoadingRule from '../rules/enforce-lazy-type-loading.js';
71
+ import enforceModuleExistenceRule from '../rules/enforce-module-existence.js';
72
+ import enforceNonEntityDtoCreate from '../rules/enforce-nonentity-dto-create.js';
73
+ import enforcePlayableEntityNamingRule from '../rules/enforce-playable-entity-naming.js';
74
+ import enforceRepositoryTokenHandlingRule from '../rules/enforce-repository-token-handling.js';
75
+ import enforceRequestDtoNoEntityDtoRule from '../rules/enforce-request-dto-no-entity-dto.js';
76
+ import enforceResultPattern from '../rules/enforce-result-pattern.js';
77
+ import enforceServiceRelationLoadingRule from '../rules/enforce-service-relation-loading.js';
78
+ import enforceToEntityConditionalAssignmentRule from '../rules/enforce-toentity-conditional-assignment.js';
79
+ import enforceTranslationsRequiredRule from '../rules/enforce-translations-required.js';
80
+ import enforceTypeormNamingConventionsRule from '../rules/enforce-typeorm-naming-conventions.js';
81
+ import entityRequiredPropertiesRule from '../rules/entity-required-properties.js';
82
+ import enumDatabaseValidationRule from '../rules/enum-database-validation.js';
83
+ import errorRules from '../rules/errors.js';
84
+ import es6Rules from '../rules/es6.js';
85
+ import noCommentsPlugin from '../rules/eslint-plugin-no-comments.js';
86
+ import filenameClassNameMatchRule from '../rules/filename-class-name-match.js';
87
+ import forbidFromEntityOutsideEntityFolderRule from '../rules/forbid-fromentity-outside-entity-folder.js';
88
+ import importRules from '../rules/imports.js';
89
+ import jestRules from '../rules/jest.js';
90
+ import maxClassesPerFileRule from '../rules/max-classes-per-file.js';
91
+ import noBlankLinesBetweenDecoratorsAndPropertiesRule from '../rules/no-blank-lines-between-decorators-and-properties.js';
92
+ import noDtoConstructorsRule from '../rules/no-dto-constructors.js';
93
+ import noDtoDefaultValuesRule from '../rules/no-dto-default-values.js';
94
+ import noDtoDuplicates from '../rules/no-dto-duplicates.js';
95
+ import noDtoInEntityRule from '../rules/no-dto-in-entity.js';
96
+ import noDynamicImportInTypesRule from '../rules/no-dynamic-import-in-types.js';
97
+ import noEntityImportsInControllersRules from '../rules/no-entity-imports-in-controllers.js';
98
+ import noEntityInSwaggerDocsRule from '../rules/no-entity-in-swagger-docs.js';
99
+ import noEntityTypeCasting from '../rules/no-entity-type-casting.js';
100
+ import noFetchRule from '../rules/no-fetch.js';
101
+ import noImportMetaEnvRule from '../rules/no-import-meta-env.js';
102
+ import noPartialTypeRule from '../rules/no-partial-type.js';
103
+ import noRelativeImportsRule from '../rules/no-relative-imports.js';
104
+ import noTsyringeRule from '../rules/no-tsyringe.js';
105
+ import noTypeAssertion from '../rules/no-type-assertion.js';
106
+ import noUndefinedEntityPropertiesRule from '../rules/no-undefined-entity-properties.js';
107
+ import nodeRules from '../rules/node.js';
108
+ import pinoLoggerFormatRule from '../rules/pino-logger-format.js';
109
+ import preferDtoClassesRule from '../rules/prefer-dto-classes.js';
110
+ import { enforceDtoCreateMethod, enforceDtoFromEntityMethod } from '../rules/prefer-dto-create-method.js';
111
+ import requireDtoResponseRule from '../rules/require-dto-response.js';
112
+ import requireValidRelationsRule from '../rules/require-valid-relations.js';
113
+ import serviceArchitectureRule from '../rules/service-architecture.js';
114
+ import strictRules from '../rules/strict.js';
115
+ import styleRules from '../rules/style.js';
116
+ import typeormColumnTypeValidationRule from '../rules/typeorm-column-type-validation.js';
117
+ import typescriptRules from '../rules/typescript.js';
118
+ import variableRules from '../rules/variables.js';
119
+ import websocketArchitectureRules from '../rules/websocket-architecture.js';
120
+ // Absolute Pfade zu den TypeScript-Konfigurationsdateien
121
+ const tsconfigRootDir = process.cwd(); // Das aktuelle Arbeitsverzeichnis
122
+ const tsconfig = path.resolve(tsconfigRootDir, "tsconfig.json");
123
+ const tsconfigEslint = path.resolve(tsconfigRootDir, "tsconfig.eslint.json");
124
+
125
+ // Registriere die benutzerdefinierten Regeln als Plugin
126
+ const customRulesPlugin = {
127
+ rules: {
128
+ "require-valid-relations": requireValidRelationsRule,
129
+ "require-dto-response": requireDtoResponseRule,
130
+ "enforce-controller-response-dto": enforceControllerResponseDtoRule,
131
+ "enforce-basecontroller": enforceBaseControllerRule.rules["enforce-basecontroller"],
132
+ "enforce-body-request-dto": enforceBodyRequestDtoRule.rules["enforce-body-request-dto"],
133
+ "enforce-dto-usage": enforceDtoUsageRule.rules["enforce-dto-usage"],
134
+ "enforce-dto-constructor": enforceDtoConstructorRule.rules["enforce-dto-constructor"],
135
+ "controller-swagger-docs": controllerSwaggerDocsRule,
136
+ "controller-swagger-complete": controllerSwaggerCompleteRule,
137
+ "controller-swagger-english": controllerSwaggerEnglishRule,
138
+ "controller-naming-conventions": controllerNamingConventionsRule,
139
+ "admin-controller-security": adminControllerSecurityRules.rules["admin-controller-security"],
140
+ "auth-guard-required": authGuardRequiredRule,
141
+ "no-entity-type-casting": noEntityTypeCasting,
142
+ "no-partial-type": noPartialTypeRule.rules["no-partial-type"],
143
+ "no-tsyringe": noTsyringeRule.rules["no-tsyringe"],
144
+ "pino-logger-format": pinoLoggerFormatRule,
145
+ "no-dto-duplicates": noDtoDuplicates,
146
+ "no-dynamic-import-in-types": noDynamicImportInTypesRule,
147
+ "dto-entity-swagger-separation": dtoEntitySwaggerSeparationRule,
148
+ "dto-entity-type-consistency": dtoEntityTypeConsistencyRule.rules["dto-entity-type-consistency"],
149
+ "dto-entity-type-matching": dtoEntityTypeMatchingRule,
150
+ "dto-visibility-modifiers": dtoVisibilityModifiersRule,
151
+ "no-dto-constructors": noDtoConstructorsRule,
152
+ "no-dto-in-entity": noDtoInEntityRule,
153
+ "no-entity-imports-in-controllers": noEntityImportsInControllersRules.rules["no-entity-imports-in-controllers"],
154
+ "no-entity-in-swagger-docs": noEntityInSwaggerDocsRule,
155
+ "prefer-dto-classes": preferDtoClassesRule.rules["prefer-dto-classes"],
156
+ "enforce-dto-from-entity-method": enforceDtoFromEntityMethod,
157
+ "enforce-dto-create-method": enforceDtoCreateMethod,
158
+ "no-relative-imports": noRelativeImportsRule,
159
+ "coordinate-naming": coordinateNamingRule,
160
+ "analyze-relation-usage": analyzeRelationUsageRule,
161
+ "no-import-meta-env": noImportMetaEnvRule,
162
+ "no-type-assertion": noTypeAssertion.rules["no-type-assertion"],
163
+ "max-classes-per-file": maxClassesPerFileRule,
164
+ "no-blank-lines-between-decorators-and-properties": noBlankLinesBetweenDecoratorsAndPropertiesRule,
165
+ "entity-required-properties": entityRequiredPropertiesRule.rules["entity-required-properties"],
166
+ "typeorm-column-type-validation": typeormColumnTypeValidationRule.rules["typeorm-column-type-validation"],
167
+ "enforce-typeorm-naming-conventions": enforceTypeormNamingConventionsRule.rules["enforce-typeorm-naming-conventions"],
168
+ "enforce-translations-required": enforceTranslationsRequiredRule,
169
+ "enforce-repository-token-handling": enforceRepositoryTokenHandlingRule,
170
+ "enforce-inject-decorator": enforceInjectDecoratorRule,
171
+ "enforce-result-pattern": enforceResultPattern,
172
+ "enforce-api-versioning": enforceApiVersioning.rules["enforce-api-versioning"],
173
+ "enforce-app-module-registration": enforceAppModuleRegistration,
174
+ "enforce-error-handling": enforceErrorHandling.rules["enforce-error-handling"],
175
+ "enforce-service-dto": serviceArchitectureRule.rules["enforce-service-dto"],
176
+ "enforce-dto-from-entity": enforceDtoFromEntity.rules["enforce-dto-from-entity"],
177
+ "enforce-entity-dto-no-request-dto": enforceEntityDtoNoRequestDto,
178
+ "enforce-entity-dto-optional-auto-fields": enforceEntityDtoOptionalAutoFieldsRule.rules["enforce-entity-dto-optional-auto-fields"],
179
+ "enforce-entity-dto-create-no-id": enforceEntityDtoCreateNoIdRule,
180
+ "enforce-nonentity-dto-create": enforceNonEntityDtoCreate.rules["enforce-nonentity-dto-create"],
181
+ "enforce-request-dto-no-entity-dto": enforceRequestDtoNoEntityDtoRule,
182
+ "enforce-entity-factory-pattern": enforceEntityFactoryPatternRule,
183
+ "enforce-dto-factory-in-services": enforceDtoFactoryInServicesRule,
184
+ "enforce-dto-entity-creation": enforceDtoEntityCreationRule,
185
+ "enforce-entity-creation-pattern": enforceEntityCreationPatternRule.rules["enforce-entity-creation-pattern"],
186
+ "enforce-dto-create-pattern": enforceDtoCreatePatternRule.rules["enforce-dto-create-pattern"],
187
+ "enforce-lazy-type-loading": enforceLazyTypeLoadingRule,
188
+ "enforce-dto-create-parameter-types": enforceDtoCreateParameterTypesRule,
189
+ "enforce-entity-instantiation-in-toentity": enforceEntityInstantiationInToEntityRule.rules["enforce-entity-instantiation-in-toentity"],
190
+ "enforce-toentity-conditional-assignment": enforceToEntityConditionalAssignmentRule.rules["enforce-toentity-conditional-assignment"],
191
+ "enforce-entity-dto-extends-base": enforceEntityDtoExtendsBaseRule,
192
+ "enforce-entity-dto-convert-method": enforceEntityDtoConvertMethodRule,
193
+ "enforce-entity-dto-from-request-dto-structure": enforceEntityDtoFromRequestDtoStructureRule,
194
+ "enforce-from-request-dto-usage": enforceFromRequestDtoUsageRule,
195
+ "enforce-service-relation-loading": enforceServiceRelationLoadingRule,
196
+ "enforce-custom-error-classes": enforceCustomErrorClassesRule,
197
+ "enforce-dto-naming-conventions": enforceDtoNamingConventions,
198
+ "enforce-dto-naming": enforceDtoNamingRule.rules["enforce-dto-naming"],
199
+ "no-undefined-entity-properties": noUndefinedEntityPropertiesRule.rules["no-undefined-entity-properties"],
200
+ "dto-annotation-property-consistency": dtoAnnotationPropertyConsistencyRule.rules["dto-annotation-property-consistency"],
201
+ "enforce-explicit-dto-types": enforceExplicitDtoTypesRule,
202
+ "no-dto-default-values": noDtoDefaultValuesRule.rules["no-dto-default-values"],
203
+ "filename-class-name-match": filenameClassNameMatchRule,
204
+ "enum-database-validation": enumDatabaseValidationRule,
205
+ "enforce-module-existence": enforceModuleExistenceRule.rules["enforce-module-existence"],
206
+ "enforce-eager-translation-loading": enforceEagerTranslationLoadingRule,
207
+ "enforce-playable-entity-naming": enforcePlayableEntityNamingRule,
208
+ "enforce-enum-for-playable-entities": enforceEnumForPlayableEntitiesRule,
209
+ "no-comments": noCommentsPlugin.rules["no-comments"],
210
+ ...controllerArchitectureRules.rules,
211
+ ...controllerReadonlyRestrictionRules.rules,
212
+ ...dtoEntityMappingCompletenessRule.rules,
213
+ ...dtoEntityTypeMatchingRule.rules,
214
+ ...forbidFromEntityOutsideEntityFolderRule.rules,
215
+ "prefer-dto-create-method": enforceDtoCreateMethod,
216
+ ...websocketArchitectureRules.rules,
217
+ },
218
+ };
219
+
220
+ // Erstelle TypeScript-Parser mit detaillierten Options
221
+ const tsParserWithOptions = {
222
+ parser: typescriptParser,
223
+ parserOptions: {
224
+ project: [tsconfig, tsconfigEslint],
225
+ tsconfigRootDir: tsconfigRootDir,
226
+ createDefaultProgram: true,
227
+ ecmaFeatures: {
228
+ jsx: false,
229
+ },
230
+ },
231
+ };
232
+
233
+ const config = [
234
+ {
235
+ ignores: [
236
+ "node_modules/**",
237
+ "dist/**",
238
+ "coverage/**",
239
+ "logs/**",
240
+ "scripts/**",
241
+ "**/__tests__/**",
242
+ "src/migration/**",
243
+ "**/migration/**",
244
+ "**/*.migration.ts",
245
+ "**/Migration*.ts"
246
+ ],
247
+ },
248
+ // Spezielle Konfiguration für Test-Fixtures - aktiviere neue Regeln
249
+ {
250
+ files: ["**/test-fixtures/**/*.ts"],
251
+ languageOptions: {
252
+ ecmaVersion: "latest",
253
+ sourceType: "module",
254
+ globals: globals.node,
255
+ ...tsParserWithOptions,
256
+ },
257
+ plugins: {
258
+ "@typescript-eslint": typescriptEslint,
259
+ "@stylistic": stylisticPlugin,
260
+ import: importPlugin,
261
+ deprecate: deprecatePlugin,
262
+ jest: jestPlugin,
263
+ "custom-rules": customRulesPlugin,
264
+ "no-comments": noCommentsPlugin,
265
+ perfectionist,
266
+ sonarjs: sonarjsPlugin,
267
+ },
268
+ rules: {
269
+ // Nur die neuen Regeln aktivieren für Test-Fixtures
270
+ "custom-rules/enforce-module-existence": "error",
271
+ // Alle anderen Regeln deaktivieren
272
+ "@typescript-eslint/no-unused-vars": "off",
273
+ "@typescript-eslint/no-explicit-any": "off",
274
+ "no-restricted-syntax": "off",
275
+ "no-restricted-globals": "off",
276
+ },
277
+ },
278
+ // Spezielle Konfiguration für Express Middleware - deaktiviere unsafe-* Regeln
279
+ {
280
+ files: [
281
+ "**/middleware/cors-debug.ts",
282
+ "**/middleware/detailed-error-logger.ts",
283
+ "**/middleware/request-logger.ts",
284
+ "**/middleware/response-logger.ts",
285
+ "**/middleware/route-tracking.ts"
286
+ ],
287
+ languageOptions: {
288
+ ecmaVersion: "latest",
289
+ sourceType: "module",
290
+ globals: globals.node,
291
+ ...tsParserWithOptions,
292
+ },
293
+ plugins: {
294
+ "@typescript-eslint": typescriptEslint,
295
+ "@stylistic": stylisticPlugin,
296
+ import: importPlugin,
297
+ deprecate: deprecatePlugin,
298
+ jest: jestPlugin,
299
+ "custom-rules": customRulesPlugin,
300
+ "no-comments": noCommentsPlugin,
301
+ perfectionist,
302
+ sonarjs: sonarjsPlugin,
303
+ },
304
+ rules: {
305
+ // Deaktiviere unsafe-* Regeln für Express Middleware
306
+ "@typescript-eslint/no-unsafe-assignment": "off",
307
+ "@typescript-eslint/no-unsafe-call": "off",
308
+ "@typescript-eslint/no-unsafe-member-access": "off",
309
+ "@typescript-eslint/no-unsafe-argument": "off",
310
+ "@typescript-eslint/no-unsafe-return": "off",
311
+ // Alle anderen Regeln beibehalten
312
+ ...bestPracticesRules.rules,
313
+ ...deprecatedRules.rules,
314
+ ...errorRules.rules,
315
+ ...es6Rules.rules,
316
+ ...importRules.rules,
317
+ "import/order": "off",
318
+ ...jestRules.rules,
319
+ ...nodeRules.rules,
320
+ ...strictRules.rules,
321
+ ...styleRules.rules,
322
+ ...typescriptRules.rules,
323
+ ...variableRules.rules,
324
+ ...deadCodeDetectionRules.rules,
325
+ },
326
+ },
327
+ // Spezielle Konfiguration für Socket.IO - deaktiviere unsafe-* Regeln
328
+ {
329
+ files: [
330
+ "**/socket/SocketGateway.ts",
331
+ "**/socket/handlers/AuraEventHandler.ts",
332
+ "**/socket/handlers/ChatEventHandler.ts",
333
+ "**/socket/handlers/CharacterEventHandler.ts"
334
+ ],
335
+ languageOptions: {
336
+ ecmaVersion: "latest",
337
+ sourceType: "module",
338
+ globals: globals.node,
339
+ ...tsParserWithOptions,
340
+ },
341
+ plugins: {
342
+ "@typescript-eslint": typescriptEslint,
343
+ "@stylistic": stylisticPlugin,
344
+ import: importPlugin,
345
+ deprecate: deprecatePlugin,
346
+ jest: jestPlugin,
347
+ "custom-rules": customRulesPlugin,
348
+ "no-comments": noCommentsPlugin,
349
+ perfectionist,
350
+ sonarjs: sonarjsPlugin,
351
+ },
352
+ rules: {
353
+ // Deaktiviere unsafe-* Regeln für Socket.IO
354
+ "@typescript-eslint/no-unsafe-assignment": "off",
355
+ "@typescript-eslint/no-unsafe-call": "off",
356
+ "@typescript-eslint/no-unsafe-member-access": "off",
357
+ "@typescript-eslint/no-unsafe-argument": "off",
358
+ "@typescript-eslint/no-unsafe-return": "off",
359
+ // Alle anderen Regeln beibehalten
360
+ ...bestPracticesRules.rules,
361
+ ...deprecatedRules.rules,
362
+ ...errorRules.rules,
363
+ ...es6Rules.rules,
364
+ ...importRules.rules,
365
+ "import/order": "off",
366
+ ...jestRules.rules,
367
+ ...nodeRules.rules,
368
+ ...strictRules.rules,
369
+ ...styleRules.rules,
370
+ ...typescriptRules.rules,
371
+ ...variableRules.rules,
372
+ ...deadCodeDetectionRules.rules,
373
+ },
374
+ },
375
+ // Spezielle Konfiguration für Authentication/Utilities - deaktiviere unsafe-* Regeln
376
+ {
377
+ files: [
378
+ "**/utilities/authentication.ts",
379
+ "**/utilities/CorsVerificationHelper.ts",
380
+ "**/utilities/CorsLoggerMiddleware.ts"
381
+ ],
382
+ languageOptions: {
383
+ ecmaVersion: "latest",
384
+ sourceType: "module",
385
+ globals: globals.node,
386
+ ...tsParserWithOptions,
387
+ },
388
+ plugins: {
389
+ "@typescript-eslint": typescriptEslint,
390
+ "@stylistic": stylisticPlugin,
391
+ import: importPlugin,
392
+ deprecate: deprecatePlugin,
393
+ jest: jestPlugin,
394
+ "custom-rules": customRulesPlugin,
395
+ "no-comments": noCommentsPlugin,
396
+ perfectionist,
397
+ sonarjs: sonarjsPlugin,
398
+ },
399
+ rules: {
400
+ // Deaktiviere unsafe-* Regeln für Authentication/Utilities
401
+ "@typescript-eslint/no-unsafe-assignment": "off",
402
+ "@typescript-eslint/no-unsafe-call": "off",
403
+ "@typescript-eslint/no-unsafe-member-access": "off",
404
+ "@typescript-eslint/no-unsafe-argument": "off",
405
+ "@typescript-eslint/no-unsafe-return": "off",
406
+ // Alle anderen Regeln beibehalten
407
+ ...bestPracticesRules.rules,
408
+ ...deprecatedRules.rules,
409
+ ...errorRules.rules,
410
+ ...es6Rules.rules,
411
+ ...importRules.rules,
412
+ "import/order": "off",
413
+ ...jestRules.rules,
414
+ ...nodeRules.rules,
415
+ ...strictRules.rules,
416
+ ...styleRules.rules,
417
+ ...typescriptRules.rules,
418
+ ...variableRules.rules,
419
+ ...deadCodeDetectionRules.rules,
420
+ },
421
+ },
422
+ {
423
+ files: ["**/*.ts"],
424
+ languageOptions: {
425
+ ecmaVersion: "latest",
426
+ sourceType: "module",
427
+ globals: globals.node,
428
+ ...tsParserWithOptions,
429
+ },
430
+
431
+ plugins: {
432
+ "@typescript-eslint": typescriptEslint,
433
+
434
+ "@stylistic": stylisticPlugin,
435
+ import: importPlugin,
436
+ deprecate: deprecatePlugin,
437
+ jest: jestPlugin,
438
+ "custom-rules": customRulesPlugin,
439
+ "no-comments": noCommentsPlugin,
440
+ "no-fetch": { rules: { "no-fetch": noFetchRule } },
441
+ perfectionist,
442
+ sonarjs: sonarjsPlugin,
443
+ },
444
+
445
+ rules: {
446
+ ...bestPracticesRules.rules,
447
+ ...deprecatedRules.rules,
448
+ ...errorRules.rules,
449
+ ...es6Rules.rules,
450
+ ...importRules.rules,
451
+ // Deaktiviere import/order um Konflikte mit perfectionist/sort-imports zu vermeiden
452
+ "import/order": "off",
453
+ ...jestRules.rules,
454
+ ...nodeRules.rules,
455
+ ...strictRules.rules,
456
+ ...styleRules.rules,
457
+ ...typescriptRules.rules,
458
+ ...variableRules.rules,
459
+ ...deadCodeDetectionRules.rules,
460
+
461
+ // Array formatting rules
462
+ "array-element-newline": ["error", "always"],
463
+ "array-bracket-newline": ["error", "consistent"],
464
+ "indent": "off", // Deaktiviert, da @stylistic/indent verwendet wird
465
+ "@stylistic/indent": ["error", 2, { SwitchCase: 1 }],
466
+ // Semikolons erzwingen
467
+ "semi": ["error", "always"],
468
+ "@stylistic/semi": ["error", "always"],
469
+ // Newline-before-return mit Padding-Lines ersetzen (bessere Indentation-Unterstützung)
470
+ "newline-before-return": "off",
471
+ "padding-line-between-statements": [
472
+ "error",
473
+ { blankLine: "always", prev: "*", next: "return" }
474
+ ],
475
+ // Verwende die benutzerdefinierten Regeln direkt
476
+ "custom-rules/require-valid-relations": "error",
477
+ "custom-rules/enforce-basecontroller": "error",
478
+ "custom-rules/enforce-body-request-dto": "error",
479
+ "custom-rules/enforce-dto-usage": "error",
480
+ "custom-rules/controller-swagger-docs": "error",
481
+ "custom-rules/controller-swagger-complete": "error",
482
+ "custom-rules/controller-swagger-english": "error",
483
+ "custom-rules/controller-naming-conventions": "error",
484
+ "custom-rules/dto-entity-swagger-separation": "error",
485
+ "custom-rules/controller-architecture": "error",
486
+ "custom-rules/require-proper-response-handling": "error",
487
+ "custom-rules/no-write-methods-in-public-controllers": [
488
+ "error",
489
+ {
490
+ exceptions: [
491
+ "CharacterController.ts",
492
+ "AuthController.ts",
493
+ ]
494
+ }
495
+ ],
496
+ "custom-rules/no-entity-type-casting": "error",
497
+ "custom-rules/no-partial-type": "error",
498
+ "custom-rules/no-tsyringe": "error",
499
+ "custom-rules/no-dto-duplicates": "error",
500
+ "custom-rules/no-dynamic-import-in-types": "error",
501
+ "custom-rules/no-undefined-entity-properties": "error",
502
+ "custom-rules/dto-annotation-property-consistency": "error",
503
+ "custom-rules/admin-controller-security": "error",
504
+ "custom-rules/no-entity-imports-in-controllers": "error",
505
+ "custom-rules/enforce-controller-response-dto": "error",
506
+ "custom-rules/no-entity-in-swagger-docs": "error",
507
+ "custom-rules/prefer-dto-classes": "warn",
508
+ "custom-rules/enforce-dto-from-entity-method": "error",
509
+ "custom-rules/enforce-dto-create-method": "error",
510
+
511
+ "max-depth": ["error", 4],
512
+ "max-nested-callbacks": ["error", 3],
513
+ "max-params": ["error", { "max": 10 }], // Maximal 10 Parameter erlaubt
514
+ "custom-rules/no-comments": "error",
515
+ "custom-rules/coordinate-naming": [
516
+ "error",
517
+ {
518
+ min: 2,
519
+ exceptions: ["_", "constructor"]
520
+ }
521
+ ],
522
+ "custom-rules/analyze-relation-usage": "error",
523
+ "custom-rules/no-import-meta-env": "error",
524
+ "custom-rules/dto-entity-mapping-completeness": "error",
525
+ "custom-rules/dto-entity-type-matching": "error",
526
+ "custom-rules/dto-entity-type-consistency": "error",
527
+ "custom-rules/forbid-fromentity-outside-entity-folder": "error",
528
+ "custom-rules/dto-visibility-modifiers": "error",
529
+ "import/no-relative-parent-imports": "error",
530
+ "import/no-relative-packages": "error",
531
+ "custom-rules/no-relative-imports": "error",
532
+ "custom-rules/enforce-explicit-dto-types": "error",
533
+ "custom-rules/no-dto-constructors": "error",
534
+ "custom-rules/max-classes-per-file": "error",
535
+ // Regel zum Verbieten aller Kommentare
536
+ "no-comments/no-comments": "error",
537
+
538
+ // Entity-Validierung
539
+ "custom-rules/entity-required-properties": "error",
540
+ "custom-rules/typeorm-column-type-validation": "error",
541
+ "custom-rules/enforce-typeorm-naming-conventions": "error",
542
+ "custom-rules/enforce-translations-required": "error",
543
+
544
+ // Neue Härtungsregeln
545
+ "custom-rules/enforce-repository-token-handling": "error",
546
+ "custom-rules/enforce-inject-decorator": "error",
547
+ "custom-rules/enforce-result-pattern": "error",
548
+ "custom-rules/enforce-api-versioning": "error",
549
+ "custom-rules/enforce-error-handling": "error",
550
+ "custom-rules/pino-logger-format": "error",
551
+ "custom-rules/enforce-service-dto": "error",
552
+ "custom-rules/enforce-dto-from-entity": "error", // Alte Regel deaktiviert
553
+ "custom-rules/enforce-entity-dto-no-request-dto": "error",
554
+ "custom-rules/enforce-entity-dto-optional-auto-fields": "error", // id, createdAt, updatedAt müssen optional sein
555
+ "custom-rules/enforce-entity-dto-create-no-id": "error", // EntityDto.create() darf kein id, createdAt, updatedAt haben
556
+ "custom-rules/enforce-nonentity-dto-create": "error", // Neue spezialisierte Regel für Non-Entity-DTOs
557
+ "custom-rules/enforce-request-dto-no-entity-dto": "error", // Request-DTOs dürfen keine EntityDto-Properties haben
558
+ "custom-rules/enforce-entity-factory-pattern": "error", // Entities nur in DTO fromEntity-Methoden initialisieren
559
+ "custom-rules/enforce-dto-factory-in-services": "error", // Services müssen EntityDto.fromRequestDto() → toEntity() → save() verwenden
560
+ "custom-rules/enforce-from-request-dto-usage": "error", // Services MÜSSEN fromRequestDto verwenden statt repository.create()
561
+ "custom-rules/enforce-service-relation-loading": "warn", // Services sollten load*EntityDto() Methoden für Relations verwenden
562
+ "custom-rules/enforce-dto-entity-creation": "error", // Verbotet entityManager.create() und erzwingt DTO-basierte Entity-Erstellung
563
+ "custom-rules/enforce-entity-creation-pattern": "error", // Entities über DTOs erstellen und mit .toEntity() konvertieren
564
+ "custom-rules/enforce-dto-create-pattern": "error", // DTO create-Methoden müssen striktes Pattern verwenden
565
+ "custom-rules/enforce-dto-create-parameter-types": "error", // DTO create-Methoden Parameter müssen 1:1 mit DTO-Properties übereinstimmen
566
+ "custom-rules/enforce-entity-instantiation-in-toentity": "error", // new Entity() nur in toEntity/fromRequestDto erlaubt
567
+ "custom-rules/enforce-toentity-conditional-assignment": "error", // id, createdAt, updatedAt müssen mit Guards gesetzt werden
568
+ "custom-rules/enforce-custom-error-classes": "error", // Custom Error-Klassen statt generischem Error
569
+ "custom-rules/enforce-dto-naming-conventions": "error", // DTO-Namenskonventionen
570
+ "custom-rules/enforce-dto-constructor": "error",
571
+ "custom-rules/filename-class-name-match": "error",
572
+ "custom-rules/enforce-lazy-type-loading": "error", // Lazy type loading für zirkuläre Imports
573
+ "custom-rules/enum-database-validation": "error",
574
+ "custom-rules/no-type-assertion": "error",
575
+ "custom-rules/no-dto-default-values": "error",
576
+ "custom-rules/enforce-eager-translation-loading": "error", // Eager loading für translation relations
577
+ "custom-rules/enforce-playable-entity-naming": "error", // Erzwingt playableRace/playableClass/playableFaction
578
+ "custom-rules/enforce-enum-for-playable-entities": "error", // Erzwingt Enum-Typen für playable entities
579
+ // Neue Regeln für TypeScript-Fehler-Abfangung
580
+ "custom-rules/enforce-module-existence": "error",
581
+
582
+ // Perfectionist-Regeln für Code-Organisation - verwende Perfectionist statt import/order
583
+ "perfectionist/sort-array-includes": "error",
584
+ "perfectionist/sort-classes": "error",
585
+ "perfectionist/sort-enums": "error",
586
+ "perfectionist/sort-exports": "error",
587
+ "perfectionist/sort-imports": "error", // Perfectionist für Import-Sortierung
588
+ "perfectionist/sort-interfaces": "error",
589
+ "perfectionist/sort-intersection-types": "error",
590
+ "perfectionist/sort-jsx-props": "error",
591
+ "perfectionist/sort-maps": "error",
592
+ "perfectionist/sort-named-exports": "error",
593
+ "perfectionist/sort-named-imports": "error", // Perfectionist für Named Imports
594
+ "perfectionist/sort-object-types": "error",
595
+ "perfectionist/sort-objects": "error",
596
+ "perfectionist/sort-sets": "error",
597
+ "perfectionist/sort-switch-case": "error",
598
+ "perfectionist/sort-union-types": "error",
599
+ "perfectionist/sort-variable-declarations": "error",
600
+
601
+ // SonarJS-Regeln für Code-Qualität und Sicherheit
602
+ "sonarjs/no-identical-expressions": "error",
603
+ "sonarjs/no-identical-functions": "error",
604
+ "sonarjs/no-redundant-boolean": "error",
605
+ "sonarjs/no-redundant-jump": "error",
606
+ "sonarjs/no-unused-collection": "error",
607
+ "sonarjs/no-use-of-empty-return-value": "error",
608
+ "sonarjs/prefer-immediate-return": "error",
609
+ "sonarjs/prefer-object-literal": "error",
610
+ "sonarjs/prefer-single-boolean-return": "error",
611
+ "sonarjs/prefer-while": "error",
612
+
613
+ // Deaktiviere semicolon-Regeln für bulletproof code (verhindert Konflikte in TypeScript-Interfaces)
614
+ "no-extra-semi": "off",
615
+ "semi": "off",
616
+
617
+ // Konfiguriere Export-Sortierung mit mehrzeiligem Format
618
+
619
+ // Verbietet direkte Verwendung von import.meta.env und process.env
620
+ "no-restricted-syntax": [
621
+ "error",
622
+ {
623
+ "selector": "MemberExpression[object.type='MemberExpression'][object.object.type='MetaProperty'][object.object.meta.name='import'][object.object.property.name='meta'][object.property.name='env']",
624
+ "message": "Direkte Verwendung von import.meta.env ist nicht erlaubt. Verwende stattdessen ConfigProvider.getXxx()."
625
+ },
626
+ {
627
+ "selector": "MemberExpression[object.type='MemberExpression'][object.object.name='process'][object.property.name='env']",
628
+ "message": "Direkte Verwendung von process.env ist nicht erlaubt. Verwende stattdessen ConfigProvider.getXxx()."
629
+ },
630
+ {
631
+ "selector": "MemberExpression[object.name='process'][property.name='env']",
632
+ "message": "Direkte Verwendung von process.env ist nicht erlaubt. Verwende stattdessen ConfigProvider.getXxx()."
633
+ },
634
+ {
635
+ "selector": "TSTypeReference[typeName.name='Record']",
636
+ "message": "Usage of Record<string, unknown> is not allowed. Define a specific interface or type instead."
637
+ },
638
+ {
639
+ "selector": "TSInterfaceBody > TSIndexSignature[typeAnnotation.typeAnnotation.type='TSUnknownKeyword']",
640
+ "message": "Index signatures with 'unknown' type ([key: string]: unknown) are not allowed. Define specific properties instead."
641
+ }
642
+ ],
643
+
644
+ // No Direct Fetch - Enforce ApiClient Usage
645
+ "no-fetch/no-fetch": "error",
646
+ },
647
+ },
648
+ // Spezielle Konfiguration für Controller
649
+ {
650
+ files: ["**/controller/**/*.ts"],
651
+ rules: {
652
+ // Maximal 10 Parameter erlaubt
653
+ "@typescript-eslint/max-params": ["error", { "max": 10 }],
654
+ // Aktiviere die Regel für BaseController-Nutzung
655
+ "custom-rules/enforce-basecontroller": "error",
656
+ // Indent-Fehler in bestehenden Controllern ignorieren (bestehender 4-Space-Stil)
657
+ "@stylistic/indent": ["error", 2, { SwitchCase: 1 }],
658
+ // Stilregeln vereinfachen für bestehende Controller
659
+ "object-curly-newline": "off",
660
+ "newline-before-return": "off",
661
+ // DTO-Zwang in Controllern deaktivieren, Responses werden separat typisiert
662
+ "custom-rules/enforce-dto-usage": "error",
663
+ // Temporär Naming-Konventionen für Controller deaktivieren
664
+ "custom-rules/controller-naming-conventions": "off",
665
+ // ensure absolute imports are above relative imports and that unassigned imports are ignored
666
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
667
+ // TODO: enforce a stricter convention in module import order?
668
+ "import/order": "off", // Deaktiviert wegen Circular Fixes Konflikten
669
+ // Deaktiviere sort-classes für Controller - Route-Reihenfolge muss manuell kontrolliert werden
670
+ "perfectionist/sort-classes": "off",
671
+ }
672
+ },
673
+ // Spezifische Ausnahme für AdminAuraController hinsichtlich Englisch-Erkennung
674
+ {
675
+ files: ["**/controller/Admin/AdminAuraController.ts"],
676
+ rules: {
677
+ "custom-rules/controller-swagger-english": "off",
678
+ },
679
+ },
680
+ // Spezielle Konfiguration für Entity-Dateien
681
+ {
682
+ files: ["**/entity/**/*.ts", "**/*Entity.ts"],
683
+ rules: {
684
+ // Aktiviere die Regel gegen DTO-Verwendung in Entities
685
+ "custom-rules/no-dto-in-entity": "error",
686
+ // Deaktiviere DTO-Usage für Entity-Dateien (TypeORM Decorators verwenden anonyme Objekte)
687
+ "custom-rules/enforce-dto-usage": "off",
688
+ // Deaktiviere Perfectionist für Entities (Entity-Property-Reihenfolge ist frei wählbar)
689
+ "perfectionist/sort-objects": "off",
690
+ "perfectionist/sort-classes": "off",
691
+ },
692
+ },
693
+ // Spezielle Konfiguration für Entity-DTOs - Circular Dependency Prevention
694
+ {
695
+ files: ["**/dto/Entity/**/*.ts", "**/*EntityDto.ts"],
696
+ rules: {
697
+ // Aktiviere die neuen Circular Dependency Prevention Regeln
698
+ "custom-rules/enforce-entity-dto-extends-base": "error",
699
+ "custom-rules/enforce-entity-dto-convert-method": "error",
700
+ "custom-rules/enforce-entity-dto-from-request-dto-structure": "error",
701
+ // Deaktiviere DTO-Usage für Entity-DTOs (@ApiProperty Decorators verwenden anonyme Objekte)
702
+ "custom-rules/enforce-dto-usage": "off",
703
+ // Deaktiviere Perfectionist für Entity-DTOs (Property-Reihenfolge ist frei wählbar)
704
+ "perfectionist/sort-objects": "off",
705
+ "perfectionist/sort-classes": "off",
706
+ },
707
+ },
708
+ // Spezielle Konfiguration für DTO-Dateien
709
+ {
710
+ files: ["**/dto/**/*.ts"],
711
+ rules: {
712
+ // Deaktiviere DTO-Usage für DTO-Dateien (@ApiProperty Decorators verwenden anonyme Objekte)
713
+ "custom-rules/enforce-dto-usage": "off",
714
+ },
715
+ },
716
+ // Ausnahme für ConfigProvider - darf import.meta.env und process.env verwenden
717
+ {
718
+ files: ["**/config/ConfigProvider.ts"],
719
+ rules: {
720
+ "no-restricted-syntax": "off",
721
+ },
722
+ },
723
+ // Ausnahme für Build-Tools - dürfen any-types und komplexere Logik verwenden
724
+ {
725
+ files: ["**/config/swagger-adapter.ts"],
726
+ rules: {
727
+ "@typescript-eslint/no-explicit-any": "off",
728
+ "@typescript-eslint/no-unsafe-return": "off",
729
+ "@typescript-eslint/no-unsafe-call": "off",
730
+ "@typescript-eslint/no-unsafe-member-access": "off",
731
+ "@typescript-eslint/no-unsafe-assignment": "error",
732
+ "no-cond-assign": "off",
733
+ "prefer-regex-literals": "off",
734
+ "prefer-destructuring": "off",
735
+ "@typescript-eslint/naming-convention": "off",
736
+ "@typescript-eslint/no-unused-vars": "off",
737
+ "import/no-extraneous-dependencies": "off",
738
+ "custom-rules/enforce-dto-usage": "error",
739
+ "no-restricted-syntax": "off",
740
+ },
741
+ },
742
+ // Ausnahme für Test-Dateien - dürfen process.env für Mocking verwenden
743
+ {
744
+ files: ["**/*.test.ts", "**/*.spec.ts", "**/__tests__/**/*.ts", "**/test-fixtures/**/*.ts"],
745
+ rules: {
746
+ "no-restricted-syntax": "off",
747
+ "@typescript-eslint/naming-convention": "off",
748
+ "@typescript-eslint/no-unsafe-assignment": "error",
749
+ "@typescript-eslint/no-unsafe-member-access": "off",
750
+ "import/no-extraneous-dependencies": "off",
751
+ },
752
+ },
753
+ {
754
+ files: ["**/__tests__/**/*", "**/migration/**/*"],
755
+ rules: {
756
+ ...Object.fromEntries(
757
+ Object.keys({
758
+ ...bestPracticesRules.rules,
759
+ ...deprecatedRules.rules,
760
+ ...errorRules.rules,
761
+ ...es6Rules.rules,
762
+ ...importRules.rules,
763
+ ...jestRules.rules,
764
+ ...nodeRules.rules,
765
+ ...strictRules.rules,
766
+ ...styleRules.rules,
767
+ ...typescriptRules.rules,
768
+ ...variableRules.rules,
769
+ ...deadCodeDetectionRules.rules,
770
+ }).map(rule => [rule, "off"])
771
+ ),
772
+ // Deaktiviere auch alle custom-rules
773
+ "custom-rules/require-valid-relations": "error",
774
+ "custom-rules/enforce-basecontroller": "error",
775
+ "custom-rules/controller-swagger-docs": "off",
776
+ "custom-rules/controller-swagger-complete": "off",
777
+ "custom-rules/controller-swagger-english": "off",
778
+ "custom-rules/controller-naming-conventions": "off",
779
+ "custom-rules/dto-entity-swagger-separation": "off",
780
+ "custom-rules/controller-architecture": "off",
781
+ "custom-rules/require-proper-response-handling": "off",
782
+ "custom-rules/no-write-methods-in-public-controllers": "off",
783
+ "custom-rules/no-tsyringe": "off",
784
+ "custom-rules/admin-controller-security": "off",
785
+ "custom-rules/no-entity-imports-in-controllers": "off",
786
+ "custom-rules/no-entity-in-swagger-docs": "off",
787
+ "custom-rules/prefer-dto-classes": "off",
788
+ "custom-rules/enforce-dto-from-entity-method": "error",
789
+ "custom-rules/enforce-dto-create-method": "error",
790
+ "custom-rules/coordinate-naming": "off",
791
+ "custom-rules/auth-guard-required": "off",
792
+ "custom-rules/analyze-relation-usage": "off",
793
+ "custom-rules/no-import-meta-env": "off",
794
+ "custom-rules/dto-entity-mapping-completeness": "error",
795
+ "custom-rules/dto-visibility-modifiers": "error",
796
+ "custom-rules/no-dto-constructors": "off",
797
+ "custom-rules/max-classes-per-file": "off",
798
+ "no-comments/no-comments": "error",
799
+ "custom-rules/entity-required-properties": "off",
800
+ "custom-rules/typeorm-column-type-validation": "off",
801
+ "custom-rules/enforce-typeorm-naming-conventions": "off",
802
+ "custom-rules/enforce-repository-token-handling": "off",
803
+ "custom-rules/enforce-result-pattern": "off",
804
+ "custom-rules/enforce-api-versioning": "off",
805
+ "custom-rules/enforce-error-handling": "off",
806
+ "custom-rules/enforce-service-dto": "off",
807
+ "custom-rules/enforce-dto-from-entity": "off",
808
+ "custom-rules/enforce-entity-dto-no-request-dto": "error",
809
+ "custom-rules/enforce-entity-dto-optional-auto-fields": "error", // id, createdAt, updatedAt müssen optional sein
810
+ "custom-rules/enforce-entity-instantiation-in-toentity": "error", // Prüft "new Entity() nur in toEntity/fromRequestDto"
811
+ "custom-rules/enforce-toentity-conditional-assignment": "error", // id, createdAt, updatedAt müssen mit Guards gesetzt werden
812
+ "custom-rules/enforce-entity-dto-extends-base": "error",
813
+ "custom-rules/enforce-entity-dto-convert-method": "error",
814
+ "custom-rules/enforce-nonentity-dto-create": "off",
815
+ "custom-rules/enforce-dto-naming-conventions": "error",
816
+ "custom-rules/enforce-dto-constructor": "off",
817
+ "custom-rules/filename-class-name-match": "error",
818
+ "custom-rules/enum-database-validation": "off",
819
+ "custom-rules/enforce-dto-usage": "error",
820
+ "no-restricted-syntax": "off",
821
+ "no-restricted-globals": "off",
822
+ },
823
+ },
824
+ // Echoes of Order-spezifische Overrides
825
+ {
826
+ files: ['src/testing/**/*.ts'],
827
+ rules: {
828
+ 'custom-rules/enforce-dto-usage': 'off',
829
+ 'custom-rules/enforce-entity-factory-pattern': 'off',
830
+ 'custom-rules/no-comments': 'off',
831
+ 'no-comments/no-comments': 'off',
832
+ },
833
+ },
834
+ {
835
+ files: [
836
+ 'src/dto/Service/**/*.ts',
837
+ 'src/dto/Response/Eoo/Game/Config/**/*.ts'
838
+ ],
839
+ rules: {
840
+ 'no-restricted-syntax': 'off',
841
+ },
842
+ },
843
+ {
844
+ files: ['src/dto/Common/EmptyDto.ts'],
845
+ rules: {
846
+ 'sonarjs/prefer-immediate-return': 'off',
847
+ },
848
+ },
849
+ {
850
+ files: ['src/service/Eoo/Game/Combat/CombatantFactory.ts'],
851
+ rules: {
852
+ 'custom-rules/enforce-entity-factory-pattern': 'off',
853
+ 'custom-rules/enforce-error-handling': 'off',
854
+ 'custom-rules/no-type-assertion': 'off',
855
+ 'no-restricted-syntax': 'off',
856
+ },
857
+ },
858
+ {
859
+ files: ['src/service/Admin/Chat/ChatTestExecutionService.ts'],
860
+ rules: {
861
+ '@typescript-eslint/no-explicit-any': 'off',
862
+ '@typescript-eslint/no-unsafe-argument': 'off',
863
+ '@typescript-eslint/no-unsafe-assignment': 'off',
864
+ '@typescript-eslint/no-unsafe-member-access': 'off',
865
+ 'custom-rules/enforce-error-handling': 'off',
866
+ 'custom-rules/enforce-inject-decorator': 'off',
867
+ 'no-await-in-loop': 'off',
868
+ },
869
+ },
870
+ {
871
+ files: ['src/service/Eoo/Game/Combat/CombatMechanicsConfigService.ts'],
872
+ rules: {
873
+ '@typescript-eslint/no-unsafe-assignment': 'off',
874
+ '@typescript-eslint/no-unsafe-call': 'off',
875
+ '@typescript-eslint/no-unsafe-member-access': 'off',
876
+ '@typescript-eslint/no-unsafe-return': 'off',
877
+ 'custom-rules/no-type-assertion': 'off',
878
+ },
879
+ },
880
+ {
881
+ files: ['src/guards/ApiKeyGuard.ts'],
882
+ rules: {
883
+ 'custom-rules/no-type-assertion': 'off',
884
+ 'no-restricted-syntax': 'off',
885
+ },
886
+ },
887
+ {
888
+ files: ['src/service/Admin/Battle/BattleSimulationService.ts'],
889
+ rules: {
890
+ 'no-await-in-loop': 'off',
891
+ },
892
+ },
893
+ ];
894
+
895
+ export default config;