@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 @@
1
+ # Configuration presets directory
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Admin ESLint Configuration
3
+ *
4
+ * Ursprüngliche Admin-Konfiguration - 1:1 übernommen
5
+ * Enthält alle Admin-spezifischen Regeln für React/TypeScript
6
+ */
7
+
8
+
9
+ import stylisticPlugin from "@stylistic/eslint-plugin";
10
+
11
+ import typescriptEslint from "@typescript-eslint/eslint-plugin";
12
+ import typescriptParser from "@typescript-eslint/parser";
13
+ import deprecatePlugin from "eslint-plugin-deprecate";
14
+ import importPlugin from "eslint-plugin-import";
15
+ import jestPlugin from "eslint-plugin-jest";
16
+ import jsxA11yPlugin from "eslint-plugin-jsx-a11y";
17
+ import noInlineStylesPlugin from "eslint-plugin-no-inline-styles";
18
+ import reactPlugin from "eslint-plugin-react";
19
+ import reactHooksPlugin from "eslint-plugin-react-hooks";
20
+ import sonarjsPlugin from "eslint-plugin-sonarjs";
21
+ import globals from "globals";
22
+ import path from "path";
23
+
24
+ // Importiere alle ursprünglichen Regeldateien
25
+ import apiResponseDtoRules from '../rules/api-response-dto.js';
26
+ import bestPracticesRules from '../rules/best-practices.js';
27
+ import deadCodeDetectionFrontend from '../rules/dead-code-detection-frontend.js';
28
+ import deprecatedRules from '../rules/deprecate.js';
29
+ import enforceRepositoryTokenHandlingRule from '../rules/enforce-repository-token-handling.js';
30
+ import enforceViteHealthMetricsRules from '../rules/enforce-vite-health-metrics.js';
31
+ import errorRules from '../rules/errors.js';
32
+ import es6Rules from '../rules/es6.js';
33
+ import importRules from '../rules/imports.js';
34
+ import jestRules from '../rules/jest.js';
35
+ import jsxRules from '../rules/jsx.js';
36
+ import noFetchRule from '../rules/no-fetch.js';
37
+ import noInlineStylesRules from '../rules/no-inline-styles.js';
38
+ import noTypeAssertion from '../rules/no-type-assertion.js';
39
+ import nodeRules from '../rules/node.js';
40
+ import preferDtoClassesRules from '../rules/prefer-dto-classes.js';
41
+ import reactRules from '../rules/react.js';
42
+ import resultPatternRules from '../rules/result-pattern.js';
43
+ import strictRules from '../rules/strict.js';
44
+ import styleRules from '../rules/style.js';
45
+ import stylisticRules from '../rules/stylistic.js';
46
+ import typescriptRules from '../rules/typescript.js';
47
+ import variableRules from '../rules/variables.js';
48
+
49
+ // Absolute Pfade zu den TypeScript-Konfigurationsdateien
50
+ const tsconfigRootDir = process.cwd(); // Das aktuelle Arbeitsverzeichnis
51
+ const tsconfig = path.resolve(tsconfigRootDir, "tsconfig.json");
52
+ const tsconfigEslint = path.resolve(tsconfigRootDir, "tsconfig.eslint.json");
53
+
54
+ // Bereinige die globals-Objekte, um Whitespace-Probleme zu vermeiden
55
+ Object.keys(globals).forEach((globalScope) => {
56
+ const scopeGlobals = globals[globalScope];
57
+ const keysToClean = Object.keys(scopeGlobals);
58
+
59
+ keysToClean.forEach((key) => {
60
+ if (key.trim() !== key) {
61
+ // Wenn der Schlüssel Leerzeichen am Anfang oder Ende hat
62
+ const cleanedKey = key.trim();
63
+ scopeGlobals[cleanedKey] = scopeGlobals[key];
64
+ delete scopeGlobals[key];
65
+ }
66
+ });
67
+ });
68
+
69
+ export default [
70
+ // Ignorieren von Dateien und Verzeichnissen
71
+ {
72
+ ignores: ["node_modules/**", "dist/**", "coverage/**", "logs/**"],
73
+ },
74
+ {
75
+ files: ["**/*.ts", "**/*.tsx"],
76
+ languageOptions: {
77
+ ecmaVersion: "latest",
78
+ sourceType: "module",
79
+ globals: {
80
+ ...globals.browser,
81
+ ...globals.es2021,
82
+ ...globals.node,
83
+ },
84
+ parser: typescriptParser,
85
+ parserOptions: {
86
+ project: [tsconfig, tsconfigEslint],
87
+ tsconfigRootDir: tsconfigRootDir,
88
+ programs: false,
89
+ ecmaFeatures: {
90
+ jsx: true,
91
+ },
92
+ },
93
+ },
94
+ linterOptions: {
95
+ reportUnusedDisableDirectives: true,
96
+ },
97
+
98
+ // Plugin-Konfiguration
99
+ plugins: {
100
+ "@typescript-eslint": typescriptEslint,
101
+
102
+ "@stylistic": stylisticPlugin,
103
+ import: importPlugin,
104
+ deprecate: deprecatePlugin,
105
+ jest: jestPlugin,
106
+ react: reactPlugin,
107
+ "react-hooks": reactHooksPlugin,
108
+ "jsx-a11y": jsxA11yPlugin,
109
+ "no-fetch": { rules: { "no-fetch": noFetchRule } },
110
+ "no-inline-styles": noInlineStylesPlugin,
111
+ "no-type-assertion": noTypeAssertion,
112
+ "prefer-dto-classes": preferDtoClassesRules,
113
+ "result-pattern": resultPatternRules,
114
+ "api-response-dto": apiResponseDtoRules,
115
+ "enforce-vite-health-metrics": enforceViteHealthMetricsRules,
116
+ "enforce-repository-token-handling": { rules: { "enforce-repository-token-handling": enforceRepositoryTokenHandlingRule } },
117
+ sonarjs: sonarjsPlugin,
118
+ },
119
+
120
+ // Regelkonfiguration
121
+ rules: {
122
+ ...bestPracticesRules.rules,
123
+ ...deprecatedRules.rules,
124
+ ...errorRules.rules,
125
+ ...es6Rules.rules,
126
+ ...importRules.rules,
127
+ ...jestRules.rules,
128
+ ...jsxRules.rules,
129
+ ...nodeRules.rules,
130
+ ...noInlineStylesRules.rules,
131
+ ...reactRules.rules,
132
+ ...strictRules.rules,
133
+ ...styleRules.rules,
134
+ ...stylisticRules.rules,
135
+ ...typescriptRules.rules,
136
+ ...variableRules.rules,
137
+ ...deadCodeDetectionFrontend.rules,
138
+ // Result-Pattern für infrastructure-Klassen
139
+ "result-pattern/require-result-return-type": "error",
140
+ // API-Response-DTO für API-Methodenaufrufe - angepasst an neue API-Client-Signatur
141
+ "api-response-dto/require-api-response-dto": "error",
142
+ // Prefer DTO Classes über Interfaces
143
+ "prefer-dto-classes/prefer-dto-classes": "error",
144
+ // Enforce Vite Health Metrics
145
+ "enforce-vite-health-metrics/enforce-vite-health-metrics": "error",
146
+ // Repository Token Handling
147
+ "enforce-repository-token-handling/enforce-repository-token-handling": "error",
148
+ // No Direct Fetch - Enforce ApiClient Usage
149
+ "no-fetch/no-fetch": "error",
150
+ // No Type Assertions (temporarily disabled due to bug)
151
+ // "no-type-assertion/no-type-assertion": "error",
152
+
153
+ // SonarJS-Regeln für Code-Qualität und Sicherheit
154
+ "sonarjs/no-identical-expressions": "error",
155
+ "sonarjs/no-identical-functions": "error",
156
+ "sonarjs/no-redundant-boolean": "error",
157
+ "sonarjs/no-redundant-jump": "error",
158
+ "sonarjs/no-unused-collection": "error",
159
+ "sonarjs/no-use-of-empty-return-value": "error",
160
+ "sonarjs/prefer-immediate-return": "error",
161
+ "sonarjs/prefer-object-literal": "error",
162
+ "sonarjs/prefer-single-boolean-return": "error",
163
+ "sonarjs/prefer-while": "error",
164
+
165
+ // Verbietet direkte Verwendung von import.meta.env und andere Syntax-Patterns
166
+ "no-restricted-syntax": [
167
+ "error",
168
+ {
169
+ "selector": "MemberExpression[object.type='MemberExpression'][object.object.type='MetaProperty'][object.object.meta.name='import'][object.object.property.name='meta'][object.property.name='env']",
170
+ "message": "Direkte Verwendung von import.meta.env ist nicht erlaubt. Verwende stattdessen ConfigProvider.getInstance().getXxx()."
171
+ },
172
+ {
173
+ selector: "CallExpression[callee.object.name='ApiResponseDto'][callee.property.name='error'][arguments.0.value='Keine Daten erhalten']",
174
+ message: "Verwende nicht den generischen Fehler 'Keine Daten erhalten'. Nutze den spezifischen Fehler aus 'response.getError()'."
175
+ },
176
+ {
177
+ selector: "CallExpression[callee.object.name='ApiResponseDto'][callee.property.name='error'][arguments.0.value='Unerwarteter Fehler: Keine Daten in erfolgreicher Response']",
178
+ message: "CRITICAL: getData() sollte nach isSuccess() niemals undefined sein! Prüfe die API-Implementierung."
179
+ }
180
+ ],
181
+ },
182
+
183
+ // Settings
184
+ settings: {
185
+ react: {
186
+ version: "detect",
187
+ },
188
+ "import/resolver": {
189
+ node: {
190
+ extensions: [".js", ".jsx", ".ts", ".tsx"],
191
+ },
192
+ },
193
+ },
194
+ },
195
+ // Ausnahme für ConfigProvider - darf import.meta.env verwenden
196
+ {
197
+ files: ["**/config/ConfigProvider.ts"],
198
+ rules: {
199
+ "no-restricted-syntax": "off",
200
+ },
201
+ },
202
+ ];
203
+
@@ -0,0 +1,46 @@
1
+ /**
2
+ * API Client ESLint Configuration
3
+ *
4
+ * Spezielle Konfiguration für API-Client-Projekte
5
+ * Erbt von der React-Konfiguration und fügt API-Client-spezifische Regeln hinzu
6
+ */
7
+
8
+ import reactConfig from './react.js';
9
+
10
+ export default [
11
+ ...reactConfig,
12
+
13
+ // API-Client-spezifische Anpassungen
14
+ {
15
+ files: ["**/*.ts", "**/*.tsx"],
16
+ languageOptions: {
17
+ parserOptions: {
18
+ ecmaFeatures: {
19
+ jsx: true,
20
+ },
21
+ },
22
+ },
23
+ plugins: {
24
+ "@typescript-eslint": (await import('@typescript-eslint/eslint-plugin')).default,
25
+
26
+ "@stylistic": (await import('@stylistic/eslint-plugin')).default,
27
+ import: (await import('eslint-plugin-import')).default,
28
+ deprecate: (await import('eslint-plugin-deprecate')).default,
29
+ perfectionist: (await import('eslint-plugin-perfectionist')).default,
30
+ security: (await import('eslint-plugin-security')).default,
31
+ sonarjs: (await import('eslint-plugin-sonarjs')).default,
32
+ "no-secrets": (await import('eslint-plugin-no-secrets')).default,
33
+ unicorn: (await import('eslint-plugin-unicorn')).default,
34
+ regexp: (await import('eslint-plugin-regexp')).default,
35
+ },
36
+ rules: {
37
+ // API-Response-DTO Regeln
38
+ "api-response-dto/require-api-response-dto": "error",
39
+
40
+ // Result-Pattern Regeln
41
+ "result-pattern/require-result-return-type": "error",
42
+
43
+ // Zusätzliche API-Client-spezifische Regeln
44
+ },
45
+ },
46
+ ];