@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,237 @@
1
+ /**
2
+ * ESLint-Regel: Verbotet fromEntity-Methoden außerhalb des /dto/Entity/ Ordners
3
+ *
4
+ * Diese Regel stellt sicher, dass:
5
+ * - DTOs im /dto/Entity/ Ordner fromEntity-Methoden haben DÜRFEN
6
+ * - DTOs außerhalb des /dto/Entity/ Ordners KEINE fromEntity-Methoden haben DÜRFEN
7
+ * - Request-, Response- und andere DTOs sind reine Datenstrukturen ohne Entity-Konvertierung
8
+ */
9
+
10
+ /** @type {import('eslint').Rule.RuleModule} */
11
+ const forbidFromEntityOutsideEntityFolderRule = {
12
+ meta: {
13
+ type: "problem",
14
+ docs: {
15
+ description: "fromEntity-Methoden sind nur in DTOs im /dto/Entity/ Ordner erlaubt",
16
+ category: "Architecture",
17
+ recommended: true,
18
+ },
19
+ hasSuggestions: true,
20
+ schema: [],
21
+ messages: {
22
+ forbiddenFromEntityOutsideEntityFolder: "fromEntity-Methode ist in DTO '{{dtoName}}' nicht erlaubt. Diese Datei liegt außerhalb des /dto/Entity/ Ordners. fromEntity-Methoden sind nur für Entity-DTOs erlaubt.",
23
+ forbiddenFromEntityArrayOutsideEntityFolder: "fromEntityArray-Methode ist in DTO '{{dtoName}}' nicht erlaubt. Diese Datei liegt außerhalb des /dto/Entity/ Ordners. fromEntityArray-Methoden sind nur für Entity-DTOs erlaubt.",
24
+ suggestMoveToEntityFolder: "DTO '{{dtoName}}' sollte in den /dto/Entity/ Ordner verschoben werden, wenn es Entity-Konvertierung benötigt.",
25
+ suggestRemoveFromEntityMethod: "fromEntity-Methode entfernen, da dieser DTO keine Entity-Konvertierung benötigt.",
26
+ },
27
+ },
28
+
29
+ create(context) {
30
+ return {
31
+ ClassDeclaration(node) {
32
+ const filename = context.getFilename();
33
+ const dtoName = node.id?.name;
34
+
35
+ if (!dtoName || !dtoName.endsWith("Dto")) {
36
+ return; // Kein DTO
37
+ }
38
+
39
+ // Prüfe, ob die Datei im /dto/Entity/ Ordner liegt
40
+ const isInEntityFolder = filename.includes("/dto/Entity/");
41
+
42
+ if (isInEntityFolder) {
43
+ return; // Entity-DTOs dürfen fromEntity-Methoden haben
44
+ }
45
+
46
+ // Prüfe auf fromEntity und fromEntityArray Methoden
47
+ const hasFromEntity = node.body.body.some(member =>
48
+ member.type === "MethodDefinition" &&
49
+ member.static &&
50
+ member.key?.name === "fromEntity"
51
+ );
52
+
53
+ const hasFromEntityArray = node.body.body.some(member =>
54
+ member.type === "MethodDefinition" &&
55
+ member.static &&
56
+ member.key?.name === "fromEntityArray"
57
+ );
58
+
59
+ if (hasFromEntity) {
60
+ context.report({
61
+ node,
62
+ messageId: "forbiddenFromEntityOutsideEntityFolder",
63
+ data: {
64
+ dtoName,
65
+ },
66
+ suggest: [
67
+ {
68
+ messageId: "suggestMoveToEntityFolder",
69
+ data: { dtoName },
70
+ fix: () => null, // Keine automatische Korrektur
71
+ },
72
+ {
73
+ messageId: "suggestRemoveFromEntityMethod",
74
+ data: { dtoName },
75
+ fix: (fixer) => {
76
+ // Finde und entferne die fromEntity-Methode
77
+ const fromEntityMethod = node.body.body.find(member =>
78
+ member.type === "MethodDefinition" &&
79
+ member.static &&
80
+ member.key?.name === "fromEntity"
81
+ );
82
+
83
+ if (fromEntityMethod) {
84
+ return fixer.remove(fromEntityMethod);
85
+ }
86
+ return null;
87
+ },
88
+ },
89
+ ],
90
+ });
91
+ }
92
+
93
+ if (hasFromEntityArray) {
94
+ context.report({
95
+ node,
96
+ messageId: "forbiddenFromEntityArrayOutsideEntityFolder",
97
+ data: {
98
+ dtoName,
99
+ },
100
+ suggest: [
101
+ {
102
+ messageId: "suggestMoveToEntityFolder",
103
+ data: { dtoName },
104
+ fix: () => null, // Keine automatische Korrektur
105
+ },
106
+ {
107
+ messageId: "suggestRemoveFromEntityMethod",
108
+ data: { dtoName },
109
+ fix: (fixer) => {
110
+ // Finde und entferne die fromEntityArray-Methode
111
+ const fromEntityArrayMethod = node.body.body.find(member =>
112
+ member.type === "MethodDefinition" &&
113
+ member.static &&
114
+ member.key?.name === "fromEntityArray"
115
+ );
116
+
117
+ if (fromEntityArrayMethod) {
118
+ return fixer.remove(fromEntityArrayMethod);
119
+ }
120
+ return null;
121
+ },
122
+ },
123
+ ],
124
+ });
125
+ }
126
+ },
127
+
128
+ // Auch für export default class
129
+ ExportDefaultDeclaration(node) {
130
+ if (node.declaration.type !== "ClassDeclaration") {
131
+ return;
132
+ }
133
+
134
+ const filename = context.getFilename();
135
+ const dtoName = node.declaration.id?.name;
136
+
137
+ if (!dtoName || !dtoName.endsWith("Dto")) {
138
+ return; // Kein DTO
139
+ }
140
+
141
+ // Prüfe, ob die Datei im /dto/Entity/ Ordner liegt
142
+ const isInEntityFolder = filename.includes("/dto/Entity/");
143
+
144
+ if (isInEntityFolder) {
145
+ return; // Entity-DTOs dürfen fromEntity-Methoden haben
146
+ }
147
+
148
+ // Prüfe auf fromEntity und fromEntityArray Methoden
149
+ const hasFromEntity = node.declaration.body.body.some(member =>
150
+ member.type === "MethodDefinition" &&
151
+ member.static &&
152
+ member.key?.name === "fromEntity"
153
+ );
154
+
155
+ const hasFromEntityArray = node.declaration.body.body.some(member =>
156
+ member.type === "MethodDefinition" &&
157
+ member.static &&
158
+ member.key?.name === "fromEntityArray"
159
+ );
160
+
161
+ if (hasFromEntity) {
162
+ context.report({
163
+ node,
164
+ messageId: "forbiddenFromEntityOutsideEntityFolder",
165
+ data: {
166
+ dtoName,
167
+ },
168
+ suggest: [
169
+ {
170
+ messageId: "suggestMoveToEntityFolder",
171
+ data: { dtoName },
172
+ fix: () => null, // Keine automatische Korrektur
173
+ },
174
+ {
175
+ messageId: "suggestRemoveFromEntityMethod",
176
+ data: { dtoName },
177
+ fix: (fixer) => {
178
+ // Finde und entferne die fromEntity-Methode
179
+ const fromEntityMethod = node.declaration.body.body.find(member =>
180
+ member.type === "MethodDefinition" &&
181
+ member.static &&
182
+ member.key?.name === "fromEntity"
183
+ );
184
+
185
+ if (fromEntityMethod) {
186
+ return fixer.remove(fromEntityMethod);
187
+ }
188
+ return null;
189
+ },
190
+ },
191
+ ],
192
+ });
193
+ }
194
+
195
+ if (hasFromEntityArray) {
196
+ context.report({
197
+ node,
198
+ messageId: "forbiddenFromEntityArrayOutsideEntityFolder",
199
+ data: {
200
+ dtoName,
201
+ },
202
+ suggest: [
203
+ {
204
+ messageId: "suggestMoveToEntityFolder",
205
+ data: { dtoName },
206
+ fix: () => null, // Keine automatische Korrektur
207
+ },
208
+ {
209
+ messageId: "suggestRemoveFromEntityMethod",
210
+ data: { dtoName },
211
+ fix: (fixer) => {
212
+ // Finde und entferne die fromEntityArray-Methode
213
+ const fromEntityArrayMethod = node.declaration.body.body.find(member =>
214
+ member.type === "MethodDefinition" &&
215
+ member.static &&
216
+ member.key?.name === "fromEntityArray"
217
+ );
218
+
219
+ if (fromEntityArrayMethod) {
220
+ return fixer.remove(fromEntityArrayMethod);
221
+ }
222
+ return null;
223
+ },
224
+ },
225
+ ],
226
+ });
227
+ }
228
+ },
229
+ };
230
+ },
231
+ };
232
+
233
+ export default {
234
+ rules: {
235
+ "forbid-fromentity-outside-entity-folder": forbidFromEntityOutsideEntityFolderRule,
236
+ },
237
+ };
@@ -0,0 +1,111 @@
1
+ /**
2
+ * ESLint Custom Rule: function-params-newline
3
+ *
4
+ * Erzwingt Zeilenumbrüche bei Funktionsdeklarationen mit mehreren Parametern.
5
+ *
6
+ * Bei mehr als einem Parameter soll immer umgebrochen werden:
7
+ *
8
+ * ❌ Falsch:
9
+ * public async getAll (@Req() _req: Request, @Query() queryParams: ItemQueryRequestDto, @Res() res: Response): Promise<void> {
10
+ *
11
+ * ✅ Richtig:
12
+ * public async getAll (
13
+ * @Req() _req: Request,
14
+ * @Query() queryParams: ItemQueryRequestDto,
15
+ * @Res() res: Response
16
+ * ): Promise<void> {
17
+ *
18
+ * Diese Regel gilt für:
19
+ * - Funktionsdeklarationen
20
+ * - Funktionsausdrücke
21
+ * - Arrow-Funktionen
22
+ * - Methoden in Klassen
23
+ */
24
+
25
+ export default {
26
+ meta: {
27
+ type: "layout",
28
+ docs: {
29
+ description: "Erzwingt Zeilenumbrüche bei Funktionen mit mehreren Parametern",
30
+ category: "Stylistic Issues",
31
+ recommended: false,
32
+ },
33
+ fixable: "whitespace",
34
+ messages: {
35
+ missingNewline: "Bei mehr als einem Parameter soll jeder Parameter auf einer eigenen Zeile stehen",
36
+ },
37
+ schema: [],
38
+ },
39
+
40
+ create (context) {
41
+ const sourceCode = context.sourceCode ?? context.getSourceCode();
42
+
43
+ function checkParams (node) {
44
+ if (!node.params || node.params.length <= 1) {
45
+ return;
46
+ }
47
+
48
+ const firstParam = node.params[0];
49
+ const lastParam = node.params[node.params.length - 1];
50
+
51
+ const openParen = sourceCode.getTokenBefore(firstParam);
52
+ const closeParen = sourceCode.getTokenAfter(lastParam);
53
+
54
+ if (!openParen || !closeParen) {
55
+ return;
56
+ }
57
+
58
+ const firstParamLine = firstParam.loc.start.line;
59
+ const openParenLine = openParen.loc.end.line;
60
+
61
+ if (firstParamLine === openParenLine) {
62
+ const lastParamLine = lastParam.loc.end.line;
63
+
64
+ if (firstParamLine === lastParamLine) {
65
+ context.report({
66
+ node,
67
+ loc: {
68
+ start: openParen.loc.start,
69
+ end: closeParen.loc.end,
70
+ },
71
+ messageId: "missingNewline",
72
+ fix (fixer) {
73
+ const fixes = [];
74
+
75
+ fixes.push(fixer.insertTextAfter(openParen, "\n "));
76
+
77
+ for (let index = 0; index < node.params.length - 1; index++) {
78
+ const param = node.params[index];
79
+ const comma = sourceCode.getTokenAfter(param);
80
+
81
+ if (comma && comma.value === ",") {
82
+ fixes.push(fixer.insertTextAfter(comma, "\n "));
83
+ }
84
+ }
85
+
86
+ fixes.push(fixer.insertTextBefore(closeParen, "\n"));
87
+
88
+ return fixes;
89
+ },
90
+ });
91
+ }
92
+ }
93
+ }
94
+
95
+ return {
96
+ FunctionDeclaration: checkParams,
97
+ FunctionExpression: checkParams,
98
+ ArrowFunctionExpression: checkParams,
99
+ MethodDefinition (node) {
100
+ if (node.value && node.value.params) {
101
+ checkParams(node.value);
102
+ }
103
+ },
104
+ };
105
+ },
106
+ };
107
+
108
+
109
+
110
+
111
+
@@ -0,0 +1,264 @@
1
+ export default {
2
+ rules: {
3
+ // Static analysis:
4
+
5
+ // ensure named imports coupled with named exports
6
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
7
+ "import/named": "error",
8
+
9
+ // ensure default import coupled with default export
10
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
11
+ "import/default": "off",
12
+
13
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
14
+ "import/namespace": "off",
15
+
16
+ // Helpful warnings:
17
+
18
+ // disallow invalid exports, e.g. multiple defaults
19
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
20
+ "import/export": "error",
21
+
22
+ // do not allow a default import name to match a named export
23
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
24
+ "import/no-named-as-default": "error",
25
+
26
+ // warn on accessing default export property names that are also named exports
27
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
28
+ "import/no-named-as-default-member": "error",
29
+
30
+ // disallow use of jsdoc-marked-deprecated imports
31
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
32
+ "import/no-deprecated": "off",
33
+
34
+ // Forbid the use of extraneous packages
35
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
36
+ // paths are treated both as absolute paths, and relative to process.cwd()
37
+ "import/no-extraneous-dependencies": [
38
+ "error",
39
+ {
40
+ devDependencies: [
41
+ "test/**", // tape, common npm pattern
42
+ "tests/**", // also common npm pattern
43
+ "spec/**", // mocha, rspec-like pattern
44
+ "**/__tests__/**", // jest pattern
45
+ "**/__mocks__/**", // jest pattern
46
+ "test.{js,jsx}", // repos with a single test file
47
+ "test-*.{js,jsx}", // repos with multiple top-level test files
48
+ "**/*{.,_}{test,spec}.{js,jsx}", // tests where the extension or filename suffix denotes that it is a test
49
+ "**/jest.config.js", // jest config
50
+ "**/jest.setup.js", // jest setup
51
+ "**/vue.config.js", // vue-cli config
52
+ "**/webpack.config.js", // webpack config
53
+ "**/webpack.config.*.js", // webpack config
54
+ "**/rollup.config.js", // rollup config
55
+ "**/rollup.config.*.js", // rollup config
56
+ "**/gulpfile.js", // gulp config
57
+ "**/gulpfile.*.js", // gulp config
58
+ "**/Gruntfile{,.js}", // grunt config
59
+ "**/protractor.conf.js", // protractor config
60
+ "**/protractor.conf.*.js", // protractor config
61
+ "**/karma.conf.js", // karma config
62
+ "**/.eslintrc.js", // eslint config
63
+ ],
64
+ optionalDependencies: false,
65
+ },
66
+ ],
67
+
68
+ // Forbid mutable exports
69
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
70
+ "import/no-mutable-exports": "error",
71
+
72
+ // Module systems:
73
+
74
+ // disallow require()
75
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
76
+ "import/no-commonjs": "off",
77
+
78
+ // disallow AMD require/define
79
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
80
+ "import/no-amd": "error",
81
+
82
+ // No Node.js builtin modules
83
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
84
+ // TODO: enable?
85
+ "import/no-nodejs-modules": "off",
86
+
87
+ // Style guide:
88
+
89
+ // disallow non-import statements appearing before import statements
90
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md
91
+ "import/first": "error",
92
+
93
+ // disallow non-import statements appearing before import statements
94
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
95
+ // deprecated: use `import/first`
96
+ "import/imports-first": "off",
97
+
98
+ // disallow duplicate imports
99
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
100
+ "import/no-duplicates": "error",
101
+
102
+ // disallow namespace imports
103
+ // TODO: enable?
104
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
105
+ "import/no-namespace": "off",
106
+
107
+ // Ensure consistent use of file extension within the import path
108
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
109
+ "import/extensions": [
110
+ "error",
111
+ "never",
112
+ {
113
+ scss: "always"
114
+ }
115
+ ],
116
+
117
+ // ensure absolute imports are above relative imports and that unassigned imports are ignored
118
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
119
+ // TODO: enforce a stricter convention in module import order?
120
+ "import/order": [
121
+ "error",
122
+ {
123
+ pathGroupsExcludedImportTypes: ["react"],
124
+ "newlines-between": "always",
125
+ alphabetize: {
126
+ order: "asc",
127
+ caseInsensitive: true,
128
+ },
129
+ groups: [
130
+ "builtin",
131
+ ["external", "internal"],
132
+ "parent",
133
+ "sibling",
134
+ "object",
135
+ ],
136
+ },
137
+ ],
138
+
139
+ // Require a newline after the last import/require in a group
140
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
141
+ "import/newline-after-import": "error",
142
+
143
+ // Require modules with a single export to use a default export
144
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
145
+ "import/prefer-default-export": "error",
146
+
147
+ // Restrict which files can be imported in a given folder
148
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md
149
+ "import/no-restricted-paths": "off",
150
+
151
+ // Forbid modules to have too many dependencies
152
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/max-dependencies.md
153
+ "import/max-dependencies": ["off", { max: 10 }],
154
+
155
+ // Forbid import of modules using absolute paths
156
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md
157
+ "import/no-absolute-path": "error",
158
+
159
+ // Forbid require() calls with expressions
160
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md
161
+ "import/no-dynamic-require": "error",
162
+
163
+ // prevent importing the submodules of other modules
164
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-internal-modules.md
165
+ "import/no-internal-modules": [
166
+ "off",
167
+ {
168
+ allow: [],
169
+ },
170
+ ],
171
+
172
+ // Warn if a module could be mistakenly parsed as a script by a consumer
173
+ // leveraging Unambiguous JavaScript Grammar
174
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/unambiguous.md
175
+ // this should not be enabled until this proposal has at least been *presented* to TC39.
176
+ // At the moment, it's not a thing.
177
+ "import/unambiguous": "off",
178
+
179
+ // Forbid Webpack loader syntax in imports
180
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md
181
+ "import/no-webpack-loader-syntax": "error",
182
+
183
+ // Prevent unassigned imports
184
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md
185
+ // importing for side effects is perfectly acceptable, if you need side effects.
186
+ "import/no-unassigned-import": "off",
187
+
188
+ // Prevent importing the default as if it were named
189
+ // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-default.md
190
+ "import/no-named-default": "error",
191
+
192
+ // Reports if a module's default export is unnamed
193
+ // https://github.com/benmosher/eslint-plugin-import/blob/d9b712ac7fd1fddc391f7b234827925c160d956f/docs/rules/no-anonymous-default-export.md
194
+ "import/no-anonymous-default-export": [
195
+ "off",
196
+ {
197
+ allowArray: false,
198
+ allowArrowFunction: false,
199
+ allowAnonymousClass: false,
200
+ allowAnonymousFunction: false,
201
+ allowLiteral: false,
202
+ allowObject: false,
203
+ },
204
+ ],
205
+
206
+ // This rule enforces that all exports are declared at the bottom of the file.
207
+ // https://github.com/benmosher/eslint-plugin-import/blob/98acd6afd04dcb6920b81330114e146dc8532ea4/docs/rules/exports-last.md
208
+ // TODO: enable?
209
+ "import/exports-last": "off",
210
+
211
+ // Reports when named exports are not grouped together in a single export declaration
212
+ // or when multiple assignments to CommonJS module.exports or exports object are present
213
+ // in a single file.
214
+ // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/group-exports.md
215
+ "import/group-exports": "off",
216
+
217
+ // forbid default exports. this is a terrible rule, do not use it.
218
+ // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-default-export.md
219
+ "import/no-default-export": "off",
220
+
221
+ // Prohibit named exports. this is a terrible rule, do not use it.
222
+ // https://github.com/benmosher/eslint-plugin-import/blob/1ec80fa35fa1819e2d35a70e68fb6a149fb57c5e/docs/rules/no-named-export.md
223
+ "import/no-named-export": "off",
224
+
225
+ // Forbid a module from importing itself
226
+ // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md
227
+ "import/no-self-import": "error",
228
+
229
+ // Forbid cyclical dependencies between modules
230
+ // https://github.com/benmosher/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md
231
+ "import/no-cycle": ["error", { maxDepth: "∞" }],
232
+
233
+ // Ensures that there are no useless path segments
234
+ // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md
235
+ "import/no-useless-path-segments": ["error", { commonjs: true }],
236
+
237
+ // dynamic imports require a leading comment with a webpackChunkName
238
+ // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md
239
+ "import/dynamic-import-chunkname": [
240
+ "off",
241
+ {
242
+ importFunctions: [],
243
+ webpackChunknameFormat: "[0-9a-zA-Z-_/.]+",
244
+ },
245
+ ],
246
+
247
+ // Use this rule to prevent imports to folders in relative parent paths.
248
+ // https://github.com/benmosher/eslint-plugin-import/blob/c34f14f67f077acd5a61b3da9c0b0de298d20059/docs/rules/no-relative-parent-imports.md
249
+ "import/no-relative-parent-imports": "error",
250
+
251
+ // Reports the use of import declarations with CommonJS exports in any module except for the main module.
252
+ // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-import-module-exports.md
253
+ "import/no-import-module-exports": [
254
+ "error",
255
+ {
256
+ exceptions: [],
257
+ },
258
+ ],
259
+
260
+ // Use this rule to prevent importing packages through relative paths.
261
+ // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-relative-packages.md
262
+ "import/no-relative-packages": "error",
263
+ },
264
+ };
package/rules/jest.js ADDED
@@ -0,0 +1,13 @@
1
+ // Jest Rules
2
+ export default {
3
+ rules: {
4
+ // eslint
5
+ "jest/consistent-test-it": [
6
+ "error",
7
+ {
8
+ fn: "test",
9
+ withinDescribe: "test",
10
+ },
11
+ ],
12
+ },
13
+ };
package/rules/jsx.js ADDED
@@ -0,0 +1,16 @@
1
+ export default {
2
+ rules: {
3
+ "jsx-a11y/anchor-is-valid": "error",
4
+ "jsx-a11y/no-noninteractive-element-interactions": "error",
5
+ "jsx-a11y/no-onchange": "off",
6
+ "jsx-a11y/no-static-element-interactions": "error",
7
+ "jsx-a11y/click-events-have-key-events": "off",
8
+ "jsx-a11y/mouse-events-have-key-events": "off",
9
+ "jsx-a11y/no-autofocus": "off",
10
+ "jsx-quotes": "error",
11
+ "jsx-a11y/alt-text": "error",
12
+ "jsx-a11y/img-redundant-alt": "error",
13
+ "jsx-a11y/aria-role": "error",
14
+ "jsx-a11y/no-access-key": "error",
15
+ },
16
+ };