@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.
- package/CHANGELOG.md +1093 -0
- package/configs/.gitkeep +1 -0
- package/configs/admin.js +203 -0
- package/configs/api-client.js +46 -0
- package/configs/backend.js +895 -0
- package/configs/domains.js +123 -0
- package/configs/frontend.js +30 -0
- package/configs/image-server.js +26 -0
- package/configs/ionos-proxy.js +372 -0
- package/configs/nestjs.js +156 -0
- package/configs/node.js +92 -0
- package/configs/react.js +111 -0
- package/configs/wiki.js +42 -0
- package/index.js +39 -0
- package/package.json +85 -0
- package/rules/.gitkeep +1 -0
- package/rules/__tests__/analyze-relation-usage.test.js.disabled +300 -0
- package/rules/__tests__/complexity.test.js.disabled +300 -0
- package/rules/__tests__/enforce-dto-factory-in-services.integration.test.js +226 -0
- package/rules/__tests__/enforce-dto-factory-in-services.test.js +177 -0
- package/rules/__tests__/enforce-entity-dto-create-no-id.integration.test.js +18 -0
- package/rules/__tests__/enforce-function-argument-count.test.js.disabled +300 -0
- package/rules/__tests__/enforce-repository-token-handling.test.js +58 -0
- package/rules/__tests__/english-only-code-strings.test.js.disabled +300 -0
- package/rules/__tests__/eslint-rules.integration.test.ts +350 -0
- package/rules/__tests__/integration-test-controller-response-dto.js +261 -0
- package/rules/__tests__/integration-test-dto-factory-in-services.js +260 -0
- package/rules/__tests__/integration-test-no-entity-type-casting.js +161 -0
- package/rules/__tests__/integration-test-typeorm-naming-conventions.js +501 -0
- package/rules/__tests__/test-config.js +33 -0
- package/rules/admin-controller-security.js +180 -0
- package/rules/analyze-relation-usage.js +687 -0
- package/rules/api-response-dto.js +174 -0
- package/rules/auth-guard-required.js +142 -0
- package/rules/backend-specific.js +36 -0
- package/rules/best-practices.js +421 -0
- package/rules/complexity.js +20 -0
- package/rules/controller-architecture.js +340 -0
- package/rules/controller-naming-conventions.js +190 -0
- package/rules/controller-readonly-restriction.js +148 -0
- package/rules/controller-swagger-complete.js +312 -0
- package/rules/controller-swagger-docs.js +119 -0
- package/rules/controller-swagger-english.js +320 -0
- package/rules/coordinate-naming.js +132 -0
- package/rules/custom-mui-button.js +135 -0
- package/rules/dead-code-detection-backend.js +50 -0
- package/rules/dead-code-detection-frontend.js +48 -0
- package/rules/dead-code-detection.js +71 -0
- package/rules/debug-controller-response-dto.js +79 -0
- package/rules/deprecate.js +8 -0
- package/rules/dto-annotation-property-consistency.js +111 -0
- package/rules/dto-entity-mapping-completeness.js +688 -0
- package/rules/dto-entity-swagger-separation.js +265 -0
- package/rules/dto-entity-type-consistency.js +352 -0
- package/rules/dto-entity-type-matching.js +519 -0
- package/rules/dto-naming-convention.js +98 -0
- package/rules/dto-visibility-modifiers.js +159 -0
- package/rules/enforce-api-versioning.js +122 -0
- package/rules/enforce-app-module-registration.js +179 -0
- package/rules/enforce-basecontroller.js +152 -0
- package/rules/enforce-body-request-dto.js +141 -0
- package/rules/enforce-controller-response-dto.js +349 -0
- package/rules/enforce-custom-error-classes.js +242 -0
- package/rules/enforce-database-transaction-safety.js +179 -0
- package/rules/enforce-dto-constructor.js +95 -0
- package/rules/enforce-dto-create-parameter-types.js +170 -0
- package/rules/enforce-dto-create-pattern.js +274 -0
- package/rules/enforce-dto-entity-creation.js +164 -0
- package/rules/enforce-dto-factory-in-services.js +188 -0
- package/rules/enforce-dto-from-entity-method.js +47 -0
- package/rules/enforce-dto-from-entity.js +314 -0
- package/rules/enforce-dto-naming-conventions.js +212 -0
- package/rules/enforce-dto-naming.js +176 -0
- package/rules/enforce-dto-usage-simple.js +114 -0
- package/rules/enforce-dto-usage.js +407 -0
- package/rules/enforce-eager-translation-loading.js +178 -0
- package/rules/enforce-entity-creation-pattern.js +137 -0
- package/rules/enforce-entity-dto-convert-method.js +157 -0
- package/rules/enforce-entity-dto-create-no-id.js +117 -0
- package/rules/enforce-entity-dto-extends-base.js +141 -0
- package/rules/enforce-entity-dto-from-request-dto-structure.js +113 -0
- package/rules/enforce-entity-dto-fromentity-complex.js +69 -0
- package/rules/enforce-entity-dto-fromentity-simple.js +69 -0
- package/rules/enforce-entity-dto-fromrequestdto-structure.js +262 -0
- package/rules/enforce-entity-dto-methods-restriction.js +159 -0
- package/rules/enforce-entity-dto-no-request-dto.js +102 -0
- package/rules/enforce-entity-dto-optional-auto-fields.js +101 -0
- package/rules/enforce-entity-dto-required-methods.js +248 -0
- package/rules/enforce-entity-factory-pattern.js +180 -0
- package/rules/enforce-entity-instantiation-in-toentity.js +125 -0
- package/rules/enforce-enum-for-playable-entities.js +95 -0
- package/rules/enforce-error-handling.js +257 -0
- package/rules/enforce-explicit-dto-types.js +118 -0
- package/rules/enforce-from-request-dto-usage.js +62 -0
- package/rules/enforce-generic-entity-dto.js +71 -0
- package/rules/enforce-inject-decorator.js +133 -0
- package/rules/enforce-lazy-type-loading.js +170 -0
- package/rules/enforce-module-existence.js +157 -0
- package/rules/enforce-nonentity-dto-create.js +107 -0
- package/rules/enforce-playable-entity-naming.js +108 -0
- package/rules/enforce-repository-token-handling.js +92 -0
- package/rules/enforce-request-dto-no-entity-dto.js +201 -0
- package/rules/enforce-request-dto-required-fields.js +217 -0
- package/rules/enforce-result-pattern.js +45 -0
- package/rules/enforce-service-relation-loading.js +116 -0
- package/rules/enforce-test-coverage.js +96 -0
- package/rules/enforce-toentity-conditional-assignment.js +132 -0
- package/rules/enforce-translations-required.js +203 -0
- package/rules/enforce-typeorm-naming-conventions.js +366 -0
- package/rules/enforce-vite-health-metrics.js +240 -0
- package/rules/entity-required-properties.js +321 -0
- package/rules/entity-to-dto-test.js +73 -0
- package/rules/enum-database-validation.js +149 -0
- package/rules/errors.js +190 -0
- package/rules/es6.js +204 -0
- package/rules/eslint-plugin-no-comments.js +44 -0
- package/rules/filename-class-name-match.js +62 -0
- package/rules/forbid-fromentity-outside-entity-folder.js +237 -0
- package/rules/function-params-newline.js +111 -0
- package/rules/imports.js +264 -0
- package/rules/jest.js +13 -0
- package/rules/jsx.js +16 -0
- package/rules/max-classes-per-file.js +49 -0
- package/rules/multiline-formatting.js +146 -0
- package/rules/no-blank-lines-between-decorators-and-properties.js +95 -0
- package/rules/no-comments.js +62 -0
- package/rules/no-dto-constructors.js +126 -0
- package/rules/no-dto-default-values.js +220 -0
- package/rules/no-dto-duplicates.js +127 -0
- package/rules/no-dto-in-entity.js +99 -0
- package/rules/no-dynamic-import-in-types.js +71 -0
- package/rules/no-dynamic-imports-in-controllers.js +95 -0
- package/rules/no-entity-imports-in-controllers.js +101 -0
- package/rules/no-entity-in-swagger-docs.js +139 -0
- package/rules/no-entity-type-casting.js +104 -0
- package/rules/no-fetch.js +77 -0
- package/rules/no-import-meta-env.js +151 -0
- package/rules/no-inline-styles.js +5 -0
- package/rules/no-magic-values.js +85 -0
- package/rules/no-partial-type.js +168 -0
- package/rules/no-relative-imports.js +31 -0
- package/rules/no-tsyringe.js +181 -0
- package/rules/no-type-assertion.js +175 -0
- package/rules/no-undefined-entity-properties.js +121 -0
- package/rules/node.js +44 -0
- package/rules/perfectionist.js +50 -0
- package/rules/performance-minimal.js +155 -0
- package/rules/performance.js +44 -0
- package/rules/pino-logger-format.js +200 -0
- package/rules/prefer-dto-classes.js +112 -0
- package/rules/prefer-dto-create-method.js +225 -0
- package/rules/promises.js +17 -0
- package/rules/react-hooks.js +15 -0
- package/rules/react.js +28 -0
- package/rules/regexp.js +70 -0
- package/rules/require-dto-response.js +81 -0
- package/rules/require-valid-relations.js +388 -0
- package/rules/result-pattern.js +162 -0
- package/rules/security.js +37 -0
- package/rules/service-architecture.js +148 -0
- package/rules/sonarjs.js +26 -0
- package/rules/strict.js +7 -0
- package/rules/style.js +611 -0
- package/rules/stylistic.js +93 -0
- package/rules/typeorm-column-type-validation.js +224 -0
- package/rules/typescript-advanced.js +113 -0
- package/rules/typescript-core.js +111 -0
- package/rules/typescript.js +146 -0
- package/rules/unicorn.js +168 -0
- package/rules/variables.js +51 -0
- package/rules/websocket-architecture.js +115 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NestJS ESLint Configuration
|
|
3
|
+
*
|
|
4
|
+
* Specialized configuration for NestJS applications with TypeScript,
|
|
5
|
+
* decorators, dependency injection, and backend-specific rules.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import typescriptEslint from "@typescript-eslint/eslint-plugin";
|
|
9
|
+
import typescriptParser from "@typescript-eslint/parser";
|
|
10
|
+
import importPlugin from "eslint-plugin-import";
|
|
11
|
+
import securityPlugin from "eslint-plugin-security";
|
|
12
|
+
import sonarjsPlugin from "eslint-plugin-sonarjs";
|
|
13
|
+
import globals from "globals";
|
|
14
|
+
import path from "path";
|
|
15
|
+
|
|
16
|
+
// Basic TypeScript rules for NestJS
|
|
17
|
+
const nestjsRules = {
|
|
18
|
+
// TypeScript rules
|
|
19
|
+
"@typescript-eslint/explicit-function-return-type": "error",
|
|
20
|
+
"@typescript-eslint/no-explicit-any": "error",
|
|
21
|
+
"@typescript-eslint/no-unused-vars": "error",
|
|
22
|
+
"@typescript-eslint/explicit-member-accessibility": "off", // Allow decorators without explicit public/private
|
|
23
|
+
"@typescript-eslint/parameter-properties": "off",
|
|
24
|
+
|
|
25
|
+
// Security rules
|
|
26
|
+
"security/detect-eval-with-expression": "error",
|
|
27
|
+
"security/detect-non-literal-fs-filename": "warn",
|
|
28
|
+
"security/detect-unsafe-regex": "error",
|
|
29
|
+
"security/detect-buffer-noassert": "error",
|
|
30
|
+
"security/detect-child-process": "warn",
|
|
31
|
+
"security/detect-disable-mustache-escape": "error",
|
|
32
|
+
"security/detect-new-buffer": "error",
|
|
33
|
+
"security/detect-no-csrf-before-method-override": "error",
|
|
34
|
+
"security/detect-object-injection": "warn",
|
|
35
|
+
"security/detect-possible-timing-attacks": "warn",
|
|
36
|
+
"security/detect-pseudoRandomBytes": "error",
|
|
37
|
+
|
|
38
|
+
// Performance rules
|
|
39
|
+
"no-await-in-loop": "error",
|
|
40
|
+
"prefer-const": "error",
|
|
41
|
+
"no-var": "error",
|
|
42
|
+
|
|
43
|
+
// Import rules
|
|
44
|
+
"import/no-unresolved": "error",
|
|
45
|
+
"import/named": "error",
|
|
46
|
+
"import/default": "error",
|
|
47
|
+
"import/namespace": "error",
|
|
48
|
+
"import/no-absolute-path": "error",
|
|
49
|
+
"import/no-dynamic-require": "error",
|
|
50
|
+
"import/no-internal-modules": "off",
|
|
51
|
+
"import/no-webpack-loader-syntax": "error",
|
|
52
|
+
"import/no-self-import": "error",
|
|
53
|
+
"import/no-cycle": "error",
|
|
54
|
+
"import/no-useless-path-segments": "error",
|
|
55
|
+
"import/no-relative-parent-imports": "error",
|
|
56
|
+
|
|
57
|
+
// Style rules
|
|
58
|
+
"curly": "error",
|
|
59
|
+
"brace-style": ["error", "1tbs"],
|
|
60
|
+
"comma-dangle": ["error", "always-multiline"],
|
|
61
|
+
"semi": ["error", "always"],
|
|
62
|
+
"quotes": ["error", "single"],
|
|
63
|
+
"indent": ["error", 2],
|
|
64
|
+
"no-trailing-spaces": "error",
|
|
65
|
+
"eol-last": "error",
|
|
66
|
+
|
|
67
|
+
// Best practices
|
|
68
|
+
"no-console": "warn",
|
|
69
|
+
"no-debugger": "error",
|
|
70
|
+
"no-alert": "error",
|
|
71
|
+
"no-eval": "error",
|
|
72
|
+
"no-implied-eval": "error",
|
|
73
|
+
"no-new-func": "error",
|
|
74
|
+
"no-script-url": "error",
|
|
75
|
+
"no-proto": "error",
|
|
76
|
+
"no-iterator": "error",
|
|
77
|
+
"no-caller": "error",
|
|
78
|
+
"no-extend-native": "error",
|
|
79
|
+
"no-extra-bind": "error",
|
|
80
|
+
"no-invalid-this": "error",
|
|
81
|
+
"no-multi-spaces": "error",
|
|
82
|
+
"no-multi-str": "error",
|
|
83
|
+
"no-new-wrappers": "error",
|
|
84
|
+
"no-throw-literal": "error",
|
|
85
|
+
"no-with": "error",
|
|
86
|
+
"radix": "error",
|
|
87
|
+
"vars-on-top": "error",
|
|
88
|
+
"wrap-iife": ["error", "any"],
|
|
89
|
+
"yoda": "error",
|
|
90
|
+
|
|
91
|
+
// SonarJS-Regeln für Code-Qualität und Sicherheit
|
|
92
|
+
"sonarjs/no-identical-expressions": "error",
|
|
93
|
+
"sonarjs/no-identical-functions": "error",
|
|
94
|
+
"sonarjs/no-redundant-boolean": "error",
|
|
95
|
+
"sonarjs/no-redundant-jump": "error",
|
|
96
|
+
"sonarjs/no-unused-collection": "error",
|
|
97
|
+
"sonarjs/no-use-of-empty-return-value": "error",
|
|
98
|
+
"sonarjs/prefer-immediate-return": "error",
|
|
99
|
+
"sonarjs/prefer-object-literal": "error",
|
|
100
|
+
"sonarjs/prefer-single-boolean-return": "error",
|
|
101
|
+
"sonarjs/prefer-while": "error",
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// Absolute paths to TypeScript configuration files
|
|
105
|
+
const tsconfigRootDir = process.cwd();
|
|
106
|
+
const tsconfig = path.resolve(tsconfigRootDir, "tsconfig.json");
|
|
107
|
+
|
|
108
|
+
// TypeScript Parser with options for NestJS
|
|
109
|
+
const tsParserWithOptions = {
|
|
110
|
+
parser: typescriptParser,
|
|
111
|
+
parserOptions: {
|
|
112
|
+
project: tsconfig,
|
|
113
|
+
tsconfigRootDir: tsconfigRootDir,
|
|
114
|
+
createDefaultProgram: true,
|
|
115
|
+
ecmaFeatures: {
|
|
116
|
+
jsx: false,
|
|
117
|
+
},
|
|
118
|
+
experimentalDecorators: true,
|
|
119
|
+
emitDecoratorMetadata: true,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default [
|
|
124
|
+
{
|
|
125
|
+
ignores: [
|
|
126
|
+
"node_modules/**",
|
|
127
|
+
"dist/**",
|
|
128
|
+
"coverage/**",
|
|
129
|
+
"logs/**",
|
|
130
|
+
"scripts/**",
|
|
131
|
+
"**/__tests__/**",
|
|
132
|
+
"**/*.test.ts",
|
|
133
|
+
"**/*.spec.ts",
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
files: ["**/*.ts"],
|
|
138
|
+
languageOptions: {
|
|
139
|
+
ecmaVersion: "latest",
|
|
140
|
+
sourceType: "module",
|
|
141
|
+
globals: globals.node,
|
|
142
|
+
...tsParserWithOptions,
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
plugins: {
|
|
146
|
+
"@typescript-eslint": typescriptEslint,
|
|
147
|
+
security: securityPlugin,
|
|
148
|
+
import: importPlugin,
|
|
149
|
+
sonarjs: sonarjsPlugin,
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
rules: {
|
|
153
|
+
...nestjsRules,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
];
|
package/configs/node.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js ESLint Configuration
|
|
3
|
+
*
|
|
4
|
+
* Spezielle Konfiguration für Node.js-Projekte
|
|
5
|
+
* Kombiniert TypeScript, Styling und Node.js-spezifische 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 importPlugin from "eslint-plugin-import";
|
|
13
|
+
import sonarjsPlugin from "eslint-plugin-sonarjs";
|
|
14
|
+
import globals from "globals";
|
|
15
|
+
|
|
16
|
+
// Importiere alle Regeldateien
|
|
17
|
+
import bestPractices from '../rules/best-practices.js';
|
|
18
|
+
import es6 from '../rules/es6.js';
|
|
19
|
+
import imports from '../rules/imports.js';
|
|
20
|
+
import node from '../rules/node.js';
|
|
21
|
+
import stylistic from '../rules/stylistic.js';
|
|
22
|
+
import typescriptAdvanced from '../rules/typescript-advanced.js';
|
|
23
|
+
import typescriptCore from '../rules/typescript-core.js';
|
|
24
|
+
import variables from '../rules/variables.js';
|
|
25
|
+
|
|
26
|
+
const tsParserWithOptions = {
|
|
27
|
+
parser: typescriptParser,
|
|
28
|
+
parserOptions: {
|
|
29
|
+
project: ["./tsconfig.json"],
|
|
30
|
+
tsconfigRootDir: process.cwd(),
|
|
31
|
+
createDefaultProgram: true,
|
|
32
|
+
ecmaFeatures: {
|
|
33
|
+
jsx: false,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export default [
|
|
39
|
+
{
|
|
40
|
+
ignores: [
|
|
41
|
+
"node_modules/**",
|
|
42
|
+
"dist/**",
|
|
43
|
+
"build/**",
|
|
44
|
+
"coverage/**",
|
|
45
|
+
"cache/**",
|
|
46
|
+
"assets/**",
|
|
47
|
+
"*.config.js",
|
|
48
|
+
"*.config.ts",
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
files: ["**/*.{js,ts}"],
|
|
53
|
+
languageOptions: {
|
|
54
|
+
ecmaVersion: "latest",
|
|
55
|
+
sourceType: "module",
|
|
56
|
+
globals: globals.node,
|
|
57
|
+
...tsParserWithOptions,
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
plugins: {
|
|
61
|
+
"@typescript-eslint": typescriptEslint,
|
|
62
|
+
|
|
63
|
+
"@stylistic": stylisticPlugin,
|
|
64
|
+
import: importPlugin,
|
|
65
|
+
sonarjs: sonarjsPlugin,
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
rules: {
|
|
69
|
+
// Kombiniere alle Regeldateien
|
|
70
|
+
...typescriptCore.rules,
|
|
71
|
+
...typescriptAdvanced.rules,
|
|
72
|
+
...stylistic.rules,
|
|
73
|
+
...imports.rules,
|
|
74
|
+
...bestPractices.rules,
|
|
75
|
+
...es6.rules,
|
|
76
|
+
...node.rules,
|
|
77
|
+
...variables.rules,
|
|
78
|
+
|
|
79
|
+
// SonarJS-Regeln für Code-Qualität und Sicherheit
|
|
80
|
+
"sonarjs/no-identical-expressions": "error",
|
|
81
|
+
"sonarjs/no-identical-functions": "error",
|
|
82
|
+
"sonarjs/no-redundant-boolean": "error",
|
|
83
|
+
"sonarjs/no-redundant-jump": "error",
|
|
84
|
+
"sonarjs/no-unused-collection": "error",
|
|
85
|
+
"sonarjs/no-use-of-empty-return-value": "error",
|
|
86
|
+
"sonarjs/prefer-immediate-return": "error",
|
|
87
|
+
"sonarjs/prefer-object-literal": "error",
|
|
88
|
+
"sonarjs/prefer-single-boolean-return": "error",
|
|
89
|
+
"sonarjs/prefer-while": "error",
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
];
|
package/configs/react.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React ESLint Configuration
|
|
3
|
+
*
|
|
4
|
+
* Spezielle Konfiguration für React-Projekte
|
|
5
|
+
* Kombiniert TypeScript, Styling und React-spezifische 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 importPlugin from "eslint-plugin-import";
|
|
13
|
+
import reactPlugin from "eslint-plugin-react";
|
|
14
|
+
import reactHooksPlugin from "eslint-plugin-react-hooks";
|
|
15
|
+
import sonarjsPlugin from "eslint-plugin-sonarjs";
|
|
16
|
+
|
|
17
|
+
import globals from "globals";
|
|
18
|
+
|
|
19
|
+
// Importiere alle Regeldateien
|
|
20
|
+
import bestPractices from '../rules/best-practices.js';
|
|
21
|
+
import deadCodeDetectionFrontend from '../rules/dead-code-detection-frontend.js';
|
|
22
|
+
import es6 from '../rules/es6.js';
|
|
23
|
+
import imports from '../rules/imports.js';
|
|
24
|
+
import reactHooks from '../rules/react-hooks.js';
|
|
25
|
+
import react from '../rules/react.js';
|
|
26
|
+
import stylistic from '../rules/stylistic.js';
|
|
27
|
+
import typescriptAdvanced from '../rules/typescript-advanced.js';
|
|
28
|
+
import typescriptCore from '../rules/typescript-core.js';
|
|
29
|
+
|
|
30
|
+
import variables from '../rules/variables.js';
|
|
31
|
+
|
|
32
|
+
const tsParserWithOptions = {
|
|
33
|
+
parser: typescriptParser,
|
|
34
|
+
parserOptions: {
|
|
35
|
+
project: ["./tsconfig.json"],
|
|
36
|
+
tsconfigRootDir: process.cwd(),
|
|
37
|
+
createDefaultProgram: true,
|
|
38
|
+
ecmaFeatures: {
|
|
39
|
+
jsx: true,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export default [
|
|
45
|
+
{
|
|
46
|
+
ignores: [
|
|
47
|
+
"node_modules/**",
|
|
48
|
+
"dist/**",
|
|
49
|
+
"build/**",
|
|
50
|
+
"coverage/**",
|
|
51
|
+
"cache/**",
|
|
52
|
+
"assets/**",
|
|
53
|
+
"*.config.js",
|
|
54
|
+
"*.config.ts",
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
files: ["**/*.{js,jsx,ts,tsx}"],
|
|
59
|
+
languageOptions: {
|
|
60
|
+
ecmaVersion: "latest",
|
|
61
|
+
sourceType: "module",
|
|
62
|
+
globals: {
|
|
63
|
+
...globals.browser,
|
|
64
|
+
...globals.es2021,
|
|
65
|
+
},
|
|
66
|
+
...tsParserWithOptions,
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
plugins: {
|
|
70
|
+
"@typescript-eslint": typescriptEslint,
|
|
71
|
+
|
|
72
|
+
"@stylistic": stylisticPlugin,
|
|
73
|
+
import: importPlugin,
|
|
74
|
+
react: reactPlugin,
|
|
75
|
+
"react-hooks": reactHooksPlugin,
|
|
76
|
+
sonarjs: sonarjsPlugin,
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
settings: {
|
|
80
|
+
react: {
|
|
81
|
+
version: "detect",
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
rules: {
|
|
86
|
+
// Kombiniere alle Regeldateien
|
|
87
|
+
...typescriptCore.rules,
|
|
88
|
+
...typescriptAdvanced.rules,
|
|
89
|
+
...stylistic.rules,
|
|
90
|
+
...imports.rules,
|
|
91
|
+
...bestPractices.rules,
|
|
92
|
+
...es6.rules,
|
|
93
|
+
...variables.rules,
|
|
94
|
+
...react.rules,
|
|
95
|
+
...reactHooks.rules,
|
|
96
|
+
...deadCodeDetectionFrontend.rules,
|
|
97
|
+
|
|
98
|
+
// SonarJS-Regeln für Code-Qualität und Sicherheit
|
|
99
|
+
"sonarjs/no-identical-expressions": "error",
|
|
100
|
+
"sonarjs/no-identical-functions": "error",
|
|
101
|
+
"sonarjs/no-redundant-boolean": "error",
|
|
102
|
+
"sonarjs/no-redundant-jump": "error",
|
|
103
|
+
"sonarjs/no-unused-collection": "error",
|
|
104
|
+
"sonarjs/no-use-of-empty-return-value": "error",
|
|
105
|
+
"sonarjs/prefer-immediate-return": "error",
|
|
106
|
+
"sonarjs/prefer-object-literal": "error",
|
|
107
|
+
"sonarjs/prefer-single-boolean-return": "error",
|
|
108
|
+
"sonarjs/prefer-while": "error",
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
];
|
package/configs/wiki.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki ESLint Configuration
|
|
3
|
+
*
|
|
4
|
+
* Spezielle Konfiguration für Wiki-Projekte (Docusaurus)
|
|
5
|
+
* Erbt von der Frontend-Konfiguration und fügt Wiki-spezifische Regeln hinzu
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import frontendConfig from './frontend.js';
|
|
9
|
+
|
|
10
|
+
export default [
|
|
11
|
+
...frontendConfig,
|
|
12
|
+
|
|
13
|
+
// Wiki-spezifische Anpassungen
|
|
14
|
+
{
|
|
15
|
+
files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
|
|
16
|
+
rules: {
|
|
17
|
+
// Wiki-spezifische Anpassungen
|
|
18
|
+
"no-restricted-globals": [
|
|
19
|
+
"error",
|
|
20
|
+
{
|
|
21
|
+
"name": "fetch",
|
|
22
|
+
"message": "Direkte Verwendung von fetch ist nicht erlaubt. Verwende stattdessen den Docusaurus HTTP-Client oder einen konfigurierten API-Client."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
// Ausnahmen für spezielle Dateien
|
|
28
|
+
{
|
|
29
|
+
files: ["**/docusaurus.config.js", "**/babel.config.js", "**/sidebars.js"],
|
|
30
|
+
rules: {
|
|
31
|
+
"no-restricted-globals": "off",
|
|
32
|
+
"@typescript-eslint/no-require-imports": "off",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
// Testdateien
|
|
36
|
+
{
|
|
37
|
+
files: ["**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx"],
|
|
38
|
+
rules: {
|
|
39
|
+
"no-restricted-globals": "off",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
];
|
package/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ESLint Configuration für Echoes of Order Projekte
|
|
3
|
+
*
|
|
4
|
+
* Technologiebasierte Konfigurationen:
|
|
5
|
+
* - backend: Für alle Backend-Projekte (Express, NestJS, etc.)
|
|
6
|
+
* - react: Für alle React-Projekte
|
|
7
|
+
* - frontend: Für Frontend-Projekte (erbt von react)
|
|
8
|
+
* - api-client: Für API-Client-Projekte (erbt von react)
|
|
9
|
+
* - node: Für einfache Node.js-Projekte
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
import adminConfig from "./configs/admin.js";
|
|
15
|
+
import apiClientConfig from "./configs/api-client.js";
|
|
16
|
+
import backendConfig from "./configs/backend.js";
|
|
17
|
+
import domainsConfig from "./configs/domains.js";
|
|
18
|
+
import frontendConfig from "./configs/frontend.js";
|
|
19
|
+
import imageServerConfig from "./configs/image-server.js";
|
|
20
|
+
import ionosProxyConfig from "./configs/ionos-proxy.js";
|
|
21
|
+
import nodeConfig from "./configs/node.js";
|
|
22
|
+
import reactConfig from "./configs/react.js";
|
|
23
|
+
import wikiConfig from "./configs/wiki.js";
|
|
24
|
+
|
|
25
|
+
const config = {
|
|
26
|
+
backend: backendConfig,
|
|
27
|
+
react: reactConfig,
|
|
28
|
+
frontend: frontendConfig,
|
|
29
|
+
apiClient: apiClientConfig,
|
|
30
|
+
node: nodeConfig,
|
|
31
|
+
"image-server": imageServerConfig,
|
|
32
|
+
admin: adminConfig,
|
|
33
|
+
domains: domainsConfig,
|
|
34
|
+
ionosProxy: ionosProxyConfig,
|
|
35
|
+
wiki: wikiConfig,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { config };
|
|
39
|
+
export default config;
|
package/package.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@echoes-of-order/eslint-config",
|
|
3
|
+
"version": "1.121.0",
|
|
4
|
+
"description": "ESLint configuration rules for Echoes of Order projects - Centralized configuration for all project types",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/echoes-of-order/eslint-config.git"
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public",
|
|
13
|
+
"registry": "https://registry.npmjs.org/"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"eslint",
|
|
17
|
+
"eslint-config",
|
|
18
|
+
"eoo",
|
|
19
|
+
"echoes-of-order",
|
|
20
|
+
"typescript",
|
|
21
|
+
"react",
|
|
22
|
+
"nodejs"
|
|
23
|
+
],
|
|
24
|
+
"author": "Echoes of Order Team",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"eslint": "^9.0.0",
|
|
28
|
+
"typescript": "^5.0.0"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@stylistic/eslint-plugin": "^5.3.1",
|
|
32
|
+
"@typescript-eslint/eslint-plugin": "^8.40.0",
|
|
33
|
+
"@typescript-eslint/parser": "^8.40.0",
|
|
34
|
+
"eslint-plugin-deprecate": "^0.8.5",
|
|
35
|
+
"eslint-plugin-import": "^2.32.0",
|
|
36
|
+
"eslint-plugin-jest": "^29.0.1",
|
|
37
|
+
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
38
|
+
"eslint-plugin-no-inline-styles": "^1.0.5",
|
|
39
|
+
"eslint-plugin-no-secrets": "^2.2.1",
|
|
40
|
+
"eslint-plugin-perfectionist": "^4.13.0",
|
|
41
|
+
"eslint-plugin-react": "^7.37.5",
|
|
42
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
43
|
+
"eslint-plugin-regexp": "^2.7.0",
|
|
44
|
+
"eslint-plugin-security": "^3.0.1",
|
|
45
|
+
"eslint-plugin-sonarjs": "^3.0.4",
|
|
46
|
+
"eslint-plugin-unicorn": "^61.0.2",
|
|
47
|
+
"franc": "^6.1.0",
|
|
48
|
+
"globals": "^16.1.0",
|
|
49
|
+
"minimatch": "^10.0.0",
|
|
50
|
+
"typescript-eslint": "^8.40.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@babel/core": "^7.28.4",
|
|
54
|
+
"@babel/plugin-proposal-decorators": "^7.28.0",
|
|
55
|
+
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
|
56
|
+
"@babel/plugin-transform-class-properties": "^7.27.1",
|
|
57
|
+
"@babel/preset-env": "^7.28.3",
|
|
58
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
59
|
+
"@swc/core": "^1.13.5",
|
|
60
|
+
"@swc/jest": "^0.2.39",
|
|
61
|
+
"@types/jest": "^30.0.0",
|
|
62
|
+
"babel-jest": "^30.1.2",
|
|
63
|
+
"eslint": "^9.34.0",
|
|
64
|
+
"jest": "^30.1.3",
|
|
65
|
+
"ts-jest": "^29.4.1",
|
|
66
|
+
"typescript": "^5.9.2"
|
|
67
|
+
},
|
|
68
|
+
"scripts": {
|
|
69
|
+
"test": "jest --no-coverage --maxWorkers=50% --silent",
|
|
70
|
+
"test:ci": "jest --no-coverage --maxWorkers=6 --silent",
|
|
71
|
+
"build": "node scripts/self-check.js",
|
|
72
|
+
"build:full": "yarn test && node scripts/self-check.js",
|
|
73
|
+
"prepublishOnly": "yarn build",
|
|
74
|
+
"self-check": "node scripts/self-check.js",
|
|
75
|
+
"validate-configs": "node scripts/validate-configs.js"
|
|
76
|
+
},
|
|
77
|
+
"files": [
|
|
78
|
+
"index.js",
|
|
79
|
+
"configs/",
|
|
80
|
+
"rules/",
|
|
81
|
+
"README.md",
|
|
82
|
+
"CHANGELOG.md",
|
|
83
|
+
"MIGRATION.md"
|
|
84
|
+
]
|
|
85
|
+
}
|
package/rules/.gitkeep
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Rules directory
|