@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,180 @@
1
+ /**
2
+ * ESLint-Regel: Admin Controller Security
3
+ * Stellt sicher, dass alle Admin-Controller die erforderlichen Security Guards verwenden müssen.
4
+ * Alle Controller im Admin-Ordner müssen @UseGuards(AuthGuard, AdminGuard) verwenden.
5
+ */
6
+
7
+
8
+
9
+ /** @type {import('eslint').Rule.RuleModule} */
10
+ const adminControllerSecurityRule = {
11
+ meta: {
12
+ type: "problem",
13
+ docs: {
14
+ description: "Admin-Controller müssen AuthGuard und AdminGuard verwenden",
15
+ category: "Security",
16
+ recommended: true,
17
+ },
18
+ schema: [],
19
+ messages: {
20
+ missingAuthGuardImport: "Admin-Controller müssen AuthGuard importieren: import AuthGuard from '@/guards/AuthGuard'",
21
+ missingAdminGuardImport: "Admin-Controller müssen AdminGuard importieren: import AdminGuard from '@/guards/AdminGuard'",
22
+ missingUseGuardsImport: "Admin-Controller müssen UseGuards importieren: import { UseGuards } from '@nestjs/common'",
23
+ missingUseGuardsDecorator: "Admin-Controller müssen @UseGuards(AuthGuard, AdminGuard) als Klassen-Decorator verwenden",
24
+ incorrectGuardsOrder: "@UseGuards muss exakt 'AuthGuard, AdminGuard' in dieser Reihenfolge enthalten",
25
+ missingApiBearerAuth: "Admin-Controller müssen @ApiBearerAuth() Decorator verwenden",
26
+ },
27
+ },
28
+ create(context) {
29
+ const filename = context.getFilename();
30
+
31
+ // Prüfe, ob es sich um einen Admin-Controller handelt
32
+ const isAdminController = filename.includes("/Admin/") &&
33
+ filename.endsWith("Controller.ts") &&
34
+ !filename.includes("BaseController") &&
35
+ !filename.includes(".test.") &&
36
+ !filename.includes(".spec.");
37
+
38
+ if (!isAdminController) return {};
39
+
40
+ let hasAuthGuardImport = false;
41
+ let hasAdminGuardImport = false;
42
+ let hasUseGuardsImport = false;
43
+ let hasCorrectUseGuardsDecorator = false;
44
+ let hasApiBearerAuthDecorator = false;
45
+ let classNode = null;
46
+
47
+ return {
48
+ // Prüfe Import-Statements
49
+ ImportDeclaration(node) {
50
+ if (node.source.value === "@/guards/AuthGuard") {
51
+ // Prüfe auf default import
52
+ const defaultImport = node.specifiers.find(spec =>
53
+ spec.type === "ImportDefaultSpecifier" && spec.local.name === "AuthGuard"
54
+ );
55
+ if (defaultImport) {
56
+ hasAuthGuardImport = true;
57
+ }
58
+ }
59
+
60
+ if (node.source.value === "@/guards/AdminGuard") {
61
+ // Prüfe auf default import
62
+ const defaultImport = node.specifiers.find(spec =>
63
+ spec.type === "ImportDefaultSpecifier" && spec.local.name === "AdminGuard"
64
+ );
65
+ if (defaultImport) {
66
+ hasAdminGuardImport = true;
67
+ }
68
+ }
69
+
70
+ if (node.source.value === "@nestjs/common") {
71
+ // Prüfe auf UseGuards import
72
+ const useGuardsImport = node.specifiers.find(spec =>
73
+ spec.type === "ImportSpecifier" && spec.imported.name === "UseGuards"
74
+ );
75
+ if (useGuardsImport) {
76
+ hasUseGuardsImport = true;
77
+ }
78
+ }
79
+ },
80
+
81
+ // Prüfe Klassen-Decorators
82
+ ClassDeclaration(node) {
83
+ classNode = node;
84
+
85
+ if (node.decorators) {
86
+ for (const decorator of node.decorators) {
87
+ // Prüfe @UseGuards Decorator
88
+ if (decorator.expression.type === "CallExpression" &&
89
+ decorator.expression.callee.type === "Identifier" &&
90
+ decorator.expression.callee.name === "UseGuards") {
91
+
92
+ const args = decorator.expression.arguments;
93
+ if (args.length === 2 &&
94
+ args[0].type === "Identifier" && args[0].name === "AuthGuard" &&
95
+ args[1].type === "Identifier" && args[1].name === "AdminGuard") {
96
+ hasCorrectUseGuardsDecorator = true;
97
+ }
98
+ }
99
+
100
+ // Prüfe @ApiBearerAuth Decorator
101
+ if (decorator.expression.type === "CallExpression" &&
102
+ decorator.expression.callee.type === "Identifier" &&
103
+ decorator.expression.callee.name === "ApiBearerAuth") {
104
+ hasApiBearerAuthDecorator = true;
105
+ }
106
+ }
107
+ }
108
+ },
109
+
110
+ // Validierung am Ende der Datei
111
+ "Program:exit"(node) {
112
+ if (!classNode) return;
113
+
114
+ // Prüfe alle erforderlichen Importe
115
+ if (!hasAuthGuardImport) {
116
+ context.report({
117
+ node: classNode,
118
+ messageId: "missingAuthGuardImport",
119
+ });
120
+ }
121
+
122
+ if (!hasAdminGuardImport) {
123
+ context.report({
124
+ node: classNode,
125
+ messageId: "missingAdminGuardImport",
126
+ });
127
+ }
128
+
129
+ if (!hasUseGuardsImport) {
130
+ context.report({
131
+ node: classNode,
132
+ messageId: "missingUseGuardsImport",
133
+ });
134
+ }
135
+
136
+ // Prüfe @UseGuards Decorator
137
+ if (!hasCorrectUseGuardsDecorator) {
138
+ // Finde UseGuards Decorator, um spezifische Fehlermeldung zu geben
139
+ let foundIncorrectUseGuards = false;
140
+
141
+ if (classNode.decorators) {
142
+ for (const decorator of classNode.decorators) {
143
+ if (decorator.expression.type === "CallExpression" &&
144
+ decorator.expression.callee.type === "Identifier" &&
145
+ decorator.expression.callee.name === "UseGuards") {
146
+ foundIncorrectUseGuards = true;
147
+ context.report({
148
+ node: decorator,
149
+ messageId: "incorrectGuardsOrder",
150
+ });
151
+ break;
152
+ }
153
+ }
154
+ }
155
+
156
+ if (!foundIncorrectUseGuards) {
157
+ context.report({
158
+ node: classNode,
159
+ messageId: "missingUseGuardsDecorator",
160
+ });
161
+ }
162
+ }
163
+
164
+ // Prüfe @ApiBearerAuth Decorator
165
+ if (!hasApiBearerAuthDecorator) {
166
+ context.report({
167
+ node: classNode,
168
+ messageId: "missingApiBearerAuth",
169
+ });
170
+ }
171
+ },
172
+ };
173
+ },
174
+ };
175
+
176
+ export default {
177
+ rules: {
178
+ "admin-controller-security": adminControllerSecurityRule,
179
+ },
180
+ };