eslint-config-vylda-typescript-react 2.0.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/.editorconfig +12 -0
- package/.gitlab-ci.yml +13 -0
- package/.husky/pre-commit +1 -0
- package/.husky/pre-push +1 -0
- package/.vscode/extensions.json +8 -0
- package/.vscode/settings.json +6 -0
- package/Changelog.md +26 -0
- package/README.md +373 -0
- package/directory.mjs +3 -0
- package/empty.ts +0 -0
- package/eslint.config.mjs +61 -0
- package/index.js +172 -0
- package/package.json +62 -0
- package/rules/imports.mjs +21 -0
- package/rules/react.mjs +45 -0
- package/rules/reactTsOff.mjs +17 -0
- package/tsconfig.json +15 -0
- package/types/global.d.ts +4 -0
package/.editorconfig
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# EditorConfig is awesome: http://EditorConfig.org
|
|
2
|
+
|
|
3
|
+
# top-most EditorConfig file
|
|
4
|
+
root = true
|
|
5
|
+
|
|
6
|
+
# Unix-style newlines with a newline ending every file
|
|
7
|
+
[*.{css,js,json,mjs,svg,ts,tsx}]
|
|
8
|
+
indent_style = space
|
|
9
|
+
end_of_line = lf
|
|
10
|
+
charset = utf-8
|
|
11
|
+
insert_final_newline = true
|
|
12
|
+
indent_size = 2
|
package/.gitlab-ci.yml
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# You can override the included template(s) by including variable overrides
|
|
2
|
+
# SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings
|
|
3
|
+
# Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/pipeline/#customization
|
|
4
|
+
# Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings
|
|
5
|
+
# Container Scanning customization: https://docs.gitlab.com/ee/user/application_security/container_scanning/#customizing-the-container-scanning-settings
|
|
6
|
+
# Note that environment variables can be set in several places
|
|
7
|
+
# See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence
|
|
8
|
+
stages:
|
|
9
|
+
- test
|
|
10
|
+
sast:
|
|
11
|
+
stage: test
|
|
12
|
+
include:
|
|
13
|
+
- template: Security/SAST.gitlab-ci.yml
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
npm test
|
package/.husky/pre-push
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
npm test
|
package/Changelog.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
All notable changes to this component will be documented in this file.
|
|
3
|
+
|
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [2.0.0] - 2025-11-13
|
|
8
|
+
### Added
|
|
9
|
+
- eslint-config-vylda-typescript package [Vilda Lipold]
|
|
10
|
+
- eslint-config-vylda-vanilla-react package [Vilda Lipold]
|
|
11
|
+
### Removed
|
|
12
|
+
- Depricated packages [Vilda Lipold]
|
|
13
|
+
### Updated
|
|
14
|
+
- Packages [Vilda Lipold]
|
|
15
|
+
- Readme [Vilda Lipold]
|
|
16
|
+
- npm scripts [Vilda Lipold]
|
|
17
|
+
|
|
18
|
+
## [1.0.1] - 2025-06-03
|
|
19
|
+
### Added
|
|
20
|
+
- Off rules for React [Vilda Lipold]
|
|
21
|
+
### Updated
|
|
22
|
+
- Packages [Vilda Lipold]
|
|
23
|
+
|
|
24
|
+
## [1.0.0] - 2025-05-27
|
|
25
|
+
### Added
|
|
26
|
+
- First release [Vilda Lipold]
|
package/README.md
ADDED
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
# eslint-config-vylda-typescript-react
|
|
2
|
+
|
|
3
|
+
Enhances Vylda's ESLint config with TypeScript and React support
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
### 1. Install dependencies
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install eslint eslint-import-resolver-typescript eslint-config-vylda-typescript-react --save-dev
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### 2. Configure ESLint
|
|
14
|
+
|
|
15
|
+
create `.eslint.config.mjs` file in project root
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
// eslint.config.mjs
|
|
19
|
+
import getConfig, { tsFiles } from "eslint-config-vylda-typescript-react";
|
|
20
|
+
|
|
21
|
+
const baseDir = import.meta.dirname;
|
|
22
|
+
|
|
23
|
+
const eslintConfig = [
|
|
24
|
+
...getConfig(baseDir),
|
|
25
|
+
{
|
|
26
|
+
files: tsFiles,
|
|
27
|
+
name: "my-rules",
|
|
28
|
+
rules: {
|
|
29
|
+
// Add custom rules here
|
|
30
|
+
},
|
|
31
|
+
settings: {
|
|
32
|
+
"import/resolver": {
|
|
33
|
+
alias: {
|
|
34
|
+
map: [
|
|
35
|
+
["@", "./src"],
|
|
36
|
+
["@assets", "./src/assets"],
|
|
37
|
+
["@utils", "./src/utils"],
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3. Run ESLint
|
|
47
|
+
|
|
48
|
+
Open a terminal to the root of your project, and run the following command:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx eslint .
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
or
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx eslint ./src/
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
ESLint will lint all `.cjs`, `.cts`, `.js`, `.jsx`, `.mjs`, `.mts`, `.ts` and `.tsx` files within the current or `./src` folder , and output results to your terminal.
|
|
61
|
+
|
|
62
|
+
You can also get results in realtime inside most IDEs via a plugin.
|
|
63
|
+
|
|
64
|
+
## Customization
|
|
65
|
+
|
|
66
|
+
You can customize all rules with `rules` property in the `eslint.config.mjs` file.
|
|
67
|
+
You can also add custom rules to the `rules` property.
|
|
68
|
+
|
|
69
|
+
### Customize extensions for ESLint import rules
|
|
70
|
+
|
|
71
|
+
You can customize extensions for ESLint import rules by using getConfig function.
|
|
72
|
+
You can extend these default extensions and dependecies with your own extensions. It is used for import plugin settings, `import/extensions` and `import/no-extraneous-dependencies` rules.
|
|
73
|
+
|
|
74
|
+
### Default values
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
// default file pattern for all rules (https://eslint.org/docs/latest/use/configure/configuration-files#configuration-objects)
|
|
78
|
+
export const files = ["**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}"];
|
|
79
|
+
|
|
80
|
+
// default file pattern for refresh config (https://github.com/ArnaudBarre/eslint-plugin-react-refresh#readme)
|
|
81
|
+
export const refreshFiles = [ '**/*.jsx', '**/*.tsx' ];
|
|
82
|
+
|
|
83
|
+
// default file pattern for TypeScript rules only
|
|
84
|
+
export const tsFiles = ["**/*.{cts,mts,ts,tsx}"];
|
|
85
|
+
|
|
86
|
+
// default plugins used in this config
|
|
87
|
+
export const plugins = {
|
|
88
|
+
"@stylistic": stylisticPlugin,
|
|
89
|
+
"@typescript-eslint": tsESLint.configs.recommendedTypeCheckedOnly.plugins["@typescript-eslint"],
|
|
90
|
+
import: importPlugin,
|
|
91
|
+
'jsx-a11y': jsxA11yPlugin,
|
|
92
|
+
n: nodePlugin,
|
|
93
|
+
perfectionist,
|
|
94
|
+
react: reactPlugin,
|
|
95
|
+
'react-hooks': reactHooks,
|
|
96
|
+
'react-refresh': reactRefresh,
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// default value for import/extension module settings (https://github.com/import-js/eslint-plugin-import?tab=readme-ov-file#importextensions)
|
|
100
|
+
export const defaultImportExtensions = ['.tsx', '.js', '.jsx', '.mjs', '.mts', '.ts'];
|
|
101
|
+
|
|
102
|
+
// default value for import/resolver settings with node resolution (https://github.com/import-js/eslint-plugin-import?tab=readme-ov-file#resolvers)
|
|
103
|
+
export const defaultImportResolverNodeExtensions = [
|
|
104
|
+
'.tsx', '.js', '.jsx', '.json', '.mjs', '.mts', '.ts',
|
|
105
|
+
];
|
|
106
|
+
|
|
107
|
+
// default value for import/extensions rule granular option (https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/extensions.md#rule-details)
|
|
108
|
+
export const defaultImportExtensionsRuleGranularOption = {
|
|
109
|
+
js: 'never',
|
|
110
|
+
json: 'always',
|
|
111
|
+
svg: 'always',
|
|
112
|
+
ts: 'never',
|
|
113
|
+
jsx: 'never',
|
|
114
|
+
tsx: 'never',
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// default value for import/no-extraneous-dependencies rule devDependencies option (https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-extraneous-dependencies.md#rule-details)
|
|
118
|
+
export const defaultImportNoExtraneousDependenciesDevDependencies = [
|
|
119
|
+
"test/**",
|
|
120
|
+
"tests/**",
|
|
121
|
+
"spec/**",
|
|
122
|
+
"**/__tests__/**",
|
|
123
|
+
"**/__mocks__/**",
|
|
124
|
+
"test.{js,jsx}",
|
|
125
|
+
"test.{ts,tsx}",
|
|
126
|
+
"test-*.{js,jsx}",
|
|
127
|
+
"test-*.{ts,tsx}",
|
|
128
|
+
"**/*{.,_}{test,spec}.{js,jsx}",
|
|
129
|
+
"**/*{.,_}{test,spec}.{ts,tsx}",
|
|
130
|
+
"**/jest.config.js",
|
|
131
|
+
"**/jest.config.ts",
|
|
132
|
+
"**/jest.setup.js",
|
|
133
|
+
"**/jest.setup.ts",
|
|
134
|
+
"**/vue.config.js",
|
|
135
|
+
"**/vue.config.ts",
|
|
136
|
+
"**/webpack.config.js",
|
|
137
|
+
"**/webpack.config.ts",
|
|
138
|
+
"**/webpack.config.*.js",
|
|
139
|
+
"**/webpack.config.*.ts",
|
|
140
|
+
"**/webpack.config.mjs",
|
|
141
|
+
"**/webpack.config.*.mjs",
|
|
142
|
+
"**/rollup.config.js",
|
|
143
|
+
"**/rollup.config.ts",
|
|
144
|
+
"**/rollup.config.*.js",
|
|
145
|
+
"**/rollup.config.*.ts",
|
|
146
|
+
"**/gulpfile.js",
|
|
147
|
+
"**/gulpfile.ts",
|
|
148
|
+
"**/gulpfile.*.js",
|
|
149
|
+
"**/gulpfile.*.ts",
|
|
150
|
+
"**/Gruntfile{,.js}",
|
|
151
|
+
"**/Gruntfile{,.ts}",
|
|
152
|
+
"**/protractor.conf.js",
|
|
153
|
+
"**/protractor.conf.ts",
|
|
154
|
+
"**/protractor.conf.*.js",
|
|
155
|
+
"**/protractor.conf.*.ts",
|
|
156
|
+
"**/karma.conf.js",
|
|
157
|
+
"**/karma.conf.ts",
|
|
158
|
+
"**/eslint.config.mjs",
|
|
159
|
+
"./rules/*.mjs",
|
|
160
|
+
"**/vitest.config.mjs",
|
|
161
|
+
"**/vitestSetup.mjs",
|
|
162
|
+
"**/tailwind.config.mjs",
|
|
163
|
+
"**/vite.config.js",
|
|
164
|
+
"**/vite.config.ts",
|
|
165
|
+
"**/vite.config.mjs",
|
|
166
|
+
"**/vite.config.*.js",
|
|
167
|
+
"**/vite.config.*.ts",
|
|
168
|
+
"**/vite.config*.mjs",
|
|
169
|
+
];
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
All default values are optional and can be overridden in the `eslint.config.mjs` file.
|
|
173
|
+
|
|
174
|
+
### Example of ESLint config with custom extensions
|
|
175
|
+
|
|
176
|
+
```javascript
|
|
177
|
+
// eslint.config.mjs
|
|
178
|
+
import
|
|
179
|
+
getConfig,
|
|
180
|
+
{
|
|
181
|
+
defaultImportExtensions,
|
|
182
|
+
defaultImportExtensionsRuleGranularOption,
|
|
183
|
+
defaultImportResolverNodeExtensions,
|
|
184
|
+
defaultImportNoExtraneousDependenciesDevDependencies,
|
|
185
|
+
files as defaultFiles,
|
|
186
|
+
plugins as defaultPlugins,
|
|
187
|
+
tsFiles as defaultTsFiles,
|
|
188
|
+
} from 'eslint-config-vylda-typescript-react';
|
|
189
|
+
import myPlugin from 'path-to-my-plugin';
|
|
190
|
+
|
|
191
|
+
const baseDir = import.meta.dirname;
|
|
192
|
+
|
|
193
|
+
const importExtensions = [
|
|
194
|
+
...defaultImportExtensions,
|
|
195
|
+
'.jsm',
|
|
196
|
+
'.tsm',
|
|
197
|
+
];
|
|
198
|
+
|
|
199
|
+
const importExtensionsRuleGranularOption = {
|
|
200
|
+
...defaultImportExtensionsRuleGranularOption,
|
|
201
|
+
jsm: 'never',
|
|
202
|
+
tsm: 'never',
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
const importResolverNodeExtensions = [
|
|
206
|
+
...defaultImportResolverNodeExtensions,
|
|
207
|
+
'.jsm',
|
|
208
|
+
'.tsm',
|
|
209
|
+
];
|
|
210
|
+
|
|
211
|
+
const importNoExtraneousDependenciesDevDependencies = [
|
|
212
|
+
...defaultImportNoExtraneousDependenciesDevDependencies,
|
|
213
|
+
'**/my-plugin.jsm',
|
|
214
|
+
];
|
|
215
|
+
|
|
216
|
+
const files = [
|
|
217
|
+
...defaultFiles,
|
|
218
|
+
'**/*.jsm',
|
|
219
|
+
'**/*.tsm',
|
|
220
|
+
];
|
|
221
|
+
|
|
222
|
+
const plugins = {
|
|
223
|
+
...defaultPlugins,
|
|
224
|
+
'my/plugin': myPlugin,
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
const tsFiles = [
|
|
228
|
+
...defaultTsFiles,
|
|
229
|
+
'**/*.tsm',
|
|
230
|
+
];
|
|
231
|
+
|
|
232
|
+
const rjConfig = getConfig(
|
|
233
|
+
baseDir,
|
|
234
|
+
{
|
|
235
|
+
files,
|
|
236
|
+
importExtensions,
|
|
237
|
+
importExtensionsRuleGranularOption,
|
|
238
|
+
importResolverNodeExtensions,
|
|
239
|
+
importNoExtraneousDependenciesDevDependencies
|
|
240
|
+
plugins,
|
|
241
|
+
tsFiles,
|
|
242
|
+
},
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
const config = [
|
|
246
|
+
...rjConfig,
|
|
247
|
+
{
|
|
248
|
+
files,
|
|
249
|
+
name: 'my/plugin',
|
|
250
|
+
rules: {
|
|
251
|
+
"my/plugin/rule": "error",
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
];
|
|
255
|
+
|
|
256
|
+
export default config;
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Partial ESLint config
|
|
260
|
+
You can also use the package as a partial ESLint config. This is useful if you want to use only some of the rules from the package.
|
|
261
|
+
|
|
262
|
+
If you can use import plugin, you must use `getImportConfig` function to get the config for the import plugin and import `plugins` object.
|
|
263
|
+
This function uses the same default values as the package, except `files` and `plugins` in option object.
|
|
264
|
+
|
|
265
|
+
```javascript
|
|
266
|
+
// eslint.config.mjs
|
|
267
|
+
import {
|
|
268
|
+
barrels, barrelsFiles, bestPractices, defaultTs, es6,
|
|
269
|
+
getImportConfig, getLanguageOptions, files, ignores, mapFiles,
|
|
270
|
+
plugins, react, refresh, refreshFiles
|
|
271
|
+
} from 'eslint-config-vylda-typescript-react';
|
|
272
|
+
|
|
273
|
+
const baseDir = import.meta.dirname;
|
|
274
|
+
|
|
275
|
+
const configs = [
|
|
276
|
+
bestPractices,
|
|
277
|
+
defaultTs,
|
|
278
|
+
es6,
|
|
279
|
+
react,
|
|
280
|
+
// you can add custom options object to the function getConfig
|
|
281
|
+
// optional parameters: importExtensions, importExtensionsRuleGranularOption, importResolverNodeExtensions,importNoExtraneousDependenciesDevDependencies
|
|
282
|
+
getImportConfig(baseDir);
|
|
283
|
+
];
|
|
284
|
+
|
|
285
|
+
const configWithFiles = mapFiles(configs, files);
|
|
286
|
+
const refreshConfigsWithFiles = mapFiles(refresh, refreshFiles);
|
|
287
|
+
const barrelsWithFiles = mapFiles(barrels, barrelsFiles);
|
|
288
|
+
|
|
289
|
+
const config = [
|
|
290
|
+
{
|
|
291
|
+
languageOptions: getLanguageOptions(baseDir),
|
|
292
|
+
name: 'typescript-eslint/base',
|
|
293
|
+
plugins,
|
|
294
|
+
},
|
|
295
|
+
...configWithFiles,
|
|
296
|
+
...refreshConfigsWithFiles,
|
|
297
|
+
...barrelsWithFiles,
|
|
298
|
+
...ignores,
|
|
299
|
+
{
|
|
300
|
+
files,
|
|
301
|
+
name: 'typescript-eslint/partial',
|
|
302
|
+
rules: {
|
|
303
|
+
"no-console": "warn",
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
]
|
|
307
|
+
|
|
308
|
+
export default config;
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## What you can import from this package
|
|
312
|
+
|
|
313
|
+
All rules are without `files` property, so you can use them as a partial ESLint config.
|
|
314
|
+
You can use `files` property to specify the files for the rule.
|
|
315
|
+
You can also use `mapFiles` function to map files for all rules.
|
|
316
|
+
|
|
317
|
+
- `default getConfig` - default helper for getting ESLint config with custom options ([source](./index.js#L66))
|
|
318
|
+
- `a11y` - ESLint config with rules for accessibility in React components ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/rules/a11y.mjs), [documentation](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y#readme))
|
|
319
|
+
- `allReactConfigs` - all used ESLint configs for React ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/index.js#L53))
|
|
320
|
+
- `barrels` - ESLint config with rules for barrel files ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/barrels.mjs), [documentation](https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md))
|
|
321
|
+
- `barrelsFiles` - default file patterns for barrel files ([default values](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/eslint.config.mjs#L8), [documentation](https://eslint.org/docs/latest/use/configure/configuration-files#configuration-objects))
|
|
322
|
+
- `bestPractices` - ESLint config with rules for best practices ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/rules/best-practices.mjs), [documentation (js)](https://eslint.org/docs/latest/rules), [documentation (stylistic)](https://eslint.style/packages/js#rules))
|
|
323
|
+
- `customs` - ESLint config with my custom rules ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/customs.mjs))
|
|
324
|
+
- `defaultImportExtensions` - default value for import/extension module settings ([default values](./rules/imports.mjs#L18), [documentation](https://github.com/import-js/eslint-plugin-import?tab=readme-ov-file#importextensions))
|
|
325
|
+
- `defaultImportExtensionsRuleGranularOption` - default value for import/resolver settings with node resolution ([default values](./rules/imports.mjs#L19), [documentation](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/extensions.md#rule-details))
|
|
326
|
+
- `defaultImportResolverNodeExtensions` - default value for import/no-extraneous-dependencies rule devDependencies option ([default values](./rules/imports.mjs#L20), [documentation](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/extensions.md#rule-details))
|
|
327
|
+
- `defaultImportNoExtraneousDependenciesDevDependencies` - default value for import/extensions rule granular option ([default values](./rules/imports.mjs#L21), [documentation](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-extraneous-dependencies.md#rule-details))
|
|
328
|
+
- `defaultTs` - ESLint config with rules for TypeScript ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/rules/defaultTs.mjs), [documentation](https://typescript-eslint.io/rules/))
|
|
329
|
+
- `errors` - ESLint config with rules for errors ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/errors.mjs), [documentation](https://eslint.org/docs/latest/rules))
|
|
330
|
+
- `es6` - ESLint config with rules for ES6 ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/es6.mjs), [documentation (js)](https://eslint.org/docs/latest/rules), [documentation (stylistic)](https://eslint.style/packages/js#rules))
|
|
331
|
+
- `files` - default file patterns for all rules ([default values](./eslint.config.mjs#L23), [documentation](https://eslint.org/docs/latest/use/configure/configuration-files#configuration-objects))
|
|
332
|
+
- `getLanguageOptions` - ESLint helper for ESLint language options with Typescript support ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/eslint.config.mjs#L36))
|
|
333
|
+
- `getReactConfig` - ESLint helper for ESLint config with React support ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/index.js#L61))
|
|
334
|
+
- `getTsImportConfig` - function to get ESLint config for Typescript import plugin ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/rules/imports.mjs#L52))
|
|
335
|
+
- `hooks` - ESLint config with rules for React hooks ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/rules/hooks.mjs), [documentation](https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks#readme))
|
|
336
|
+
- `ignores` - ESLint config with global ignored folder patterns ([default values](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/ignores.mjs#L4), [documentation](https://eslint.org/docs/latest/use/configure/ignore#ignoring-files))
|
|
337
|
+
- `mapFiles` - helper function to map files for all configs ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/mapFiles.mjs))
|
|
338
|
+
- `node` - ESLint config with rules for Node.js ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/node.mjs), [documentation](https://github.com/eslint-community/eslint-plugin-n?tab=readme-ov-file#-rules))
|
|
339
|
+
- `perfectionist` - ESLint config with rules for perfectionist ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/perfectionist.mjs), [documentation](https://perfectionist.dev/rules))
|
|
340
|
+
- `plugins` - default plugins used in this config ([source](./eslint.config.mjs#L31))
|
|
341
|
+
- `plus` - ESLint config with rules for extended rules ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/rules/plus.mjs), [documentation](https://eslint.style/packages/plus))
|
|
342
|
+
- `react` - ESLint config with rules for React ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/rules/react.mjs), [documentation](https://github.com/jsx-eslint/eslint-plugin-react#readme))
|
|
343
|
+
- `reactConfigs` - ESLint configs for Typescript React without refresh rules ([source](./rules/react.mjs#L38))
|
|
344
|
+
- `reactPerfectionist` - ESLint config with rules for React and Typescript perfectionist ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/rules/perfectionist.mjs)),
|
|
345
|
+
- `reactPlugins` - ESLint plugins used for React only ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/eslint.config.mjs#L15))
|
|
346
|
+
- `reactStylistic` - ESLint config with stylistic rules for React ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/rules/stylistic.mjs), [documentation](https://eslint.style/packages/jsx))
|
|
347
|
+
- `reactTsOff` - Disabled React rules for incompatibilty or Typescript cheking ([source](./rules/reactTsOff.mjs))
|
|
348
|
+
- `reactVanillaPlugins` - default plugins used in React config ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/eslint.config.mjs#L20))
|
|
349
|
+
- `refresh` - ESLint config with rules for React refresh ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla-react/-/blob/main/rules/refresh.mjs), [documentation](https://github.com/ArnaudBarre/eslint-plugin-react-refresh#readme))
|
|
350
|
+
- `refreshFiles` - default file patterns for React refresh config ([source](./eslint.config.mjs#L25))
|
|
351
|
+
- `strict` - ESLint config with rules for strict mode ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/strict.mjs))
|
|
352
|
+
- `stylistic` - ESLint config with stylistic rules ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/stylistic.mjs))
|
|
353
|
+
- `tsConfig` - ESLint config with rules for TypeScript configuration ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/rules/typescriptConfig.mjs#L8))
|
|
354
|
+
- `tsFiles` - default file patterns for TypeScript rules only ([default values](./eslint.config.mjs#L30), [documentation](https://eslint.org/docs/latest/use/configure/configuration-files#configuration-objects))
|
|
355
|
+
- `tsPlugins` - default Typescript plugins only used in this config ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/eslint.config.mjs#L16))
|
|
356
|
+
- `tsStrict` - ESLint config with rules for strict TypeScript mode ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/rules/strictTs.mjs), [documentation](https://typescript-eslint.io/rules/))
|
|
357
|
+
- `tsStylistic` - ESLint config with Typescript stylistic rules ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/rules/stylisticTs.mjs), [documentation](https://eslint.style/packages/ts))
|
|
358
|
+
- `tsVanillaPlugins` - Vanilla and Typescript plugins used in this config ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/eslint.config.mjs#L22))
|
|
359
|
+
- `vanillaConfigs` - Eslint configuration for vanilla javascript only (without import rules) ([source](https://gitlab.com/Vylda/eslint-config-vylda-typescript/-/blob/main/index.js#L115))
|
|
360
|
+
- `vanillaPlugins` - default plugins used in this config for vanilla javascript ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/eslint.config.mjs#L17))
|
|
361
|
+
- `variables` - ESLint config with rules for variables ([source](https://gitlab.com/Vylda/eslint-config-vylda-vanilla/-/blob/main/rules/variables.mjs))
|
|
362
|
+
|
|
363
|
+
## Additional Documentation
|
|
364
|
+
|
|
365
|
+
- [Changelog.md](Changelog.md)
|
|
366
|
+
|
|
367
|
+
## Credits
|
|
368
|
+
|
|
369
|
+
Authored and maintained by Vilda Lipold ([dovolena.cz](https://dovolena.cz))
|
|
370
|
+
|
|
371
|
+
## License
|
|
372
|
+
|
|
373
|
+
Open source [licensed as MIT](LICENSE).
|
package/directory.mjs
ADDED
package/empty.ts
ADDED
|
File without changes
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import getConfig, {
|
|
2
|
+
ignores, mapFiles, plugins as tsVanillaPlugins,
|
|
3
|
+
} from 'eslint-config-vylda-typescript';
|
|
4
|
+
import {
|
|
5
|
+
reactPlugins as baseReactPlugins,
|
|
6
|
+
perfectionist,
|
|
7
|
+
refreshFiles as reactRefreshFiles,
|
|
8
|
+
refresh,
|
|
9
|
+
} from 'eslint-config-vylda-vanilla-react';
|
|
10
|
+
import baseDir from './directory.mjs';
|
|
11
|
+
import {
|
|
12
|
+
defaultImportExtensions,
|
|
13
|
+
defaultImportExtensionsRuleGranularOption,
|
|
14
|
+
defaultImportNoExtraneousDependenciesDevDependencies,
|
|
15
|
+
defaultImportResolverNodeExtensions,
|
|
16
|
+
} from './rules/imports.mjs';
|
|
17
|
+
import reactConfigs from './rules/react.mjs';
|
|
18
|
+
import reactTsOff from './rules/reactTsOff.mjs';
|
|
19
|
+
|
|
20
|
+
const dineddd = defaultImportNoExtraneousDependenciesDevDependencies;
|
|
21
|
+
const diergo = defaultImportExtensionsRuleGranularOption;
|
|
22
|
+
|
|
23
|
+
export const files = ['**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}'];
|
|
24
|
+
|
|
25
|
+
export const refreshFiles = [
|
|
26
|
+
...reactRefreshFiles,
|
|
27
|
+
'**/*.tsx',
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
export const tsFiles = ['**/*.{cts,mts,ts,tsx}'];
|
|
31
|
+
export const plugins = {
|
|
32
|
+
...tsVanillaPlugins,
|
|
33
|
+
...baseReactPlugins,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const defaultOptions = {
|
|
37
|
+
files,
|
|
38
|
+
importExtensions: defaultImportExtensions,
|
|
39
|
+
importExtensionsRuleGranularOption: diergo,
|
|
40
|
+
importNoExtraneousDependenciesDevDependencies: dineddd,
|
|
41
|
+
importResolverNodeExtensions: defaultImportResolverNodeExtensions,
|
|
42
|
+
plugins,
|
|
43
|
+
tsFiles,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const tsConfigs = getConfig(baseDir, defaultOptions);
|
|
47
|
+
const reactConfigsWithFiles = mapFiles(reactConfigs, files);
|
|
48
|
+
const refreshConfigsWithFiles = mapFiles(refresh, refreshFiles);
|
|
49
|
+
const perfectionistWithFiles = mapFiles(perfectionist, files);
|
|
50
|
+
const offWithFiles = mapFiles(reactTsOff, tsFiles);
|
|
51
|
+
|
|
52
|
+
const config = [
|
|
53
|
+
...tsConfigs,
|
|
54
|
+
...reactConfigsWithFiles,
|
|
55
|
+
...refreshConfigsWithFiles,
|
|
56
|
+
...perfectionistWithFiles,
|
|
57
|
+
...offWithFiles,
|
|
58
|
+
...ignores,
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
export default config;
|
package/index.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import getTsConfig, {
|
|
2
|
+
barrels,
|
|
3
|
+
barrelsFiles,
|
|
4
|
+
customs,
|
|
5
|
+
defaultTs,
|
|
6
|
+
errors,
|
|
7
|
+
es6,
|
|
8
|
+
getLanguageOptions,
|
|
9
|
+
getImportConfig as getTsImportConfig,
|
|
10
|
+
ignores,
|
|
11
|
+
mapFiles,
|
|
12
|
+
node,
|
|
13
|
+
perfectionist,
|
|
14
|
+
plus,
|
|
15
|
+
strict,
|
|
16
|
+
stylistic,
|
|
17
|
+
tsConfig,
|
|
18
|
+
tsPlugins,
|
|
19
|
+
tsStrict,
|
|
20
|
+
tsStylistic,
|
|
21
|
+
plugins as tsVanillaPlugins,
|
|
22
|
+
vanillaConfigs,
|
|
23
|
+
vanillaPlugins,
|
|
24
|
+
variables,
|
|
25
|
+
} from 'eslint-config-vylda-typescript';
|
|
26
|
+
import {
|
|
27
|
+
a11y,
|
|
28
|
+
reactConfigs as allReactConfigs,
|
|
29
|
+
bestPractices,
|
|
30
|
+
getConfig as getReactConfig,
|
|
31
|
+
hooks,
|
|
32
|
+
react,
|
|
33
|
+
perfectionist as reactPerfectionist,
|
|
34
|
+
reactPlugins,
|
|
35
|
+
reactStylistic,
|
|
36
|
+
plugins as reactVanillaPlugins,
|
|
37
|
+
refresh,
|
|
38
|
+
} from 'eslint-config-vylda-vanilla-react';
|
|
39
|
+
import {
|
|
40
|
+
files, plugins, refreshFiles, tsFiles,
|
|
41
|
+
} from './eslint.config.mjs';
|
|
42
|
+
import {
|
|
43
|
+
defaultImportExtensions,
|
|
44
|
+
defaultImportExtensionsRuleGranularOption,
|
|
45
|
+
defaultImportNoExtraneousDependenciesDevDependencies,
|
|
46
|
+
defaultImportResolverNodeExtensions,
|
|
47
|
+
} from './rules/imports.mjs';
|
|
48
|
+
import reactConfigs from './rules/react.mjs';
|
|
49
|
+
import reactTsOff from './rules/reactTsOff.mjs';
|
|
50
|
+
|
|
51
|
+
const dineddd = defaultImportNoExtraneousDependenciesDevDependencies;
|
|
52
|
+
const diergo = defaultImportExtensionsRuleGranularOption;
|
|
53
|
+
|
|
54
|
+
const defaultOptions = {
|
|
55
|
+
barrelsFiles,
|
|
56
|
+
files,
|
|
57
|
+
importExtensions: defaultImportExtensions,
|
|
58
|
+
importExtensionsRuleGranularOption: diergo,
|
|
59
|
+
importNoExtraneousDependenciesDevDependencies: dineddd,
|
|
60
|
+
importResolverNodeExtensions: defaultImportResolverNodeExtensions,
|
|
61
|
+
plugins,
|
|
62
|
+
tsFiles,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* returns eslint config for typescript
|
|
67
|
+
* @param {string} baseDir - base directory for tsconfig.json
|
|
68
|
+
* @param {object} [options={}] - options
|
|
69
|
+
* @param {Array.<string>} [options.barrelsFiles=['**\/index.{js,mjs,mts,ts}']] - file patterns for barrel files
|
|
70
|
+
* @param {Array.<string>} [options.files=['**\/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}']] - file patterns to lint
|
|
71
|
+
* @param {Array.<string>} [options.importExtensions=['.tsx', '.js', '.jsx', '.mjs', '.mts', '.ts']] - extensions for module settings import/extensions
|
|
72
|
+
* @param {Object.<string, string>} [options.importExtensionsRuleGranularOption] - granural oprions for import/extensions rule; for default values see Readme.md
|
|
73
|
+
* @param {Array.<string>} [options.importNoExtraneousDependenciesDevDependencies=['see Readme.md']] - devDependencies for import/no-extraneous-dependencies rule
|
|
74
|
+
* @param {Array.<string>} [options.importResolverNodeExtensions=['.tsx', '.js', '.jsx', '.json', '.mjs', '.mts', '.ts']] - extensions for module settings import/resolver.node.extensions
|
|
75
|
+
* @param {Object.<string, Object | undefined>} [options.plugins] - default plugins; for default values see Readme.md
|
|
76
|
+
* @param {Array.<string>} [options.refreshFiles=['**\/*.jsx', '**\/*.tsx']] - file patterns for refresh rules
|
|
77
|
+
* @param {Array.<string>} [options.tsFiles=['**\/*.jsx', '**\/*.tsx']] - file patterns for refresh rules
|
|
78
|
+
* @returns {Array.<Object>} - ESLint Flat config
|
|
79
|
+
*/
|
|
80
|
+
const getConfig = (baseDir, options = defaultOptions) => {
|
|
81
|
+
const {
|
|
82
|
+
barrelsFiles: customBarrelsFiles = barrelsFiles,
|
|
83
|
+
files: customFiles = files,
|
|
84
|
+
importExtensions: ie = defaultImportExtensions,
|
|
85
|
+
importExtensionsRuleGranularOption: iergo = diergo,
|
|
86
|
+
importNoExtraneousDependenciesDevDependencies: ineddd = dineddd,
|
|
87
|
+
importResolverNodeExtensions: irne = defaultImportResolverNodeExtensions,
|
|
88
|
+
plugins: customPlugins = plugins,
|
|
89
|
+
refreshFiles: customRefreshFiles = refreshFiles,
|
|
90
|
+
tsFiles: customTsFiles = tsFiles,
|
|
91
|
+
} = options;
|
|
92
|
+
|
|
93
|
+
const tsConfigs = getTsConfig(baseDir, {
|
|
94
|
+
barrelsFiles: customBarrelsFiles,
|
|
95
|
+
files: customFiles,
|
|
96
|
+
importExtensions: ie,
|
|
97
|
+
importExtensionsRuleGranularOption: iergo,
|
|
98
|
+
importNoExtraneousDependenciesDevDependencies: ineddd,
|
|
99
|
+
importResolverNodeExtensions: irne,
|
|
100
|
+
plugins: customPlugins,
|
|
101
|
+
tsFiles: customTsFiles,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const reactConfigsWithFiles = mapFiles(reactConfigs, customFiles);
|
|
105
|
+
const refreshConfigsWithFiles = mapFiles(refresh, customRefreshFiles);
|
|
106
|
+
const perfectionistWithFiles = mapFiles(reactPerfectionist, files);
|
|
107
|
+
const offWithFiles = mapFiles(reactTsOff, tsFiles);
|
|
108
|
+
|
|
109
|
+
const eslintConfig = [
|
|
110
|
+
{
|
|
111
|
+
name: 'typescript-react/base',
|
|
112
|
+
plugins: customPlugins,
|
|
113
|
+
},
|
|
114
|
+
...tsConfigs,
|
|
115
|
+
...reactConfigsWithFiles,
|
|
116
|
+
...refreshConfigsWithFiles,
|
|
117
|
+
...perfectionistWithFiles,
|
|
118
|
+
...offWithFiles,
|
|
119
|
+
...ignores,
|
|
120
|
+
];
|
|
121
|
+
|
|
122
|
+
return eslintConfig;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export {
|
|
126
|
+
a11y,
|
|
127
|
+
allReactConfigs,
|
|
128
|
+
barrels,
|
|
129
|
+
barrelsFiles,
|
|
130
|
+
bestPractices,
|
|
131
|
+
customs,
|
|
132
|
+
defaultImportExtensions,
|
|
133
|
+
defaultImportExtensionsRuleGranularOption,
|
|
134
|
+
defaultImportNoExtraneousDependenciesDevDependencies,
|
|
135
|
+
defaultImportResolverNodeExtensions,
|
|
136
|
+
defaultTs,
|
|
137
|
+
errors,
|
|
138
|
+
es6,
|
|
139
|
+
files,
|
|
140
|
+
getLanguageOptions,
|
|
141
|
+
getReactConfig,
|
|
142
|
+
getTsImportConfig,
|
|
143
|
+
hooks,
|
|
144
|
+
ignores,
|
|
145
|
+
mapFiles,
|
|
146
|
+
node,
|
|
147
|
+
perfectionist,
|
|
148
|
+
plugins,
|
|
149
|
+
plus,
|
|
150
|
+
react,
|
|
151
|
+
reactConfigs,
|
|
152
|
+
reactPerfectionist,
|
|
153
|
+
reactPlugins,
|
|
154
|
+
reactStylistic,
|
|
155
|
+
reactTsOff,
|
|
156
|
+
reactVanillaPlugins,
|
|
157
|
+
refresh,
|
|
158
|
+
refreshFiles,
|
|
159
|
+
strict,
|
|
160
|
+
stylistic,
|
|
161
|
+
tsConfig,
|
|
162
|
+
tsFiles,
|
|
163
|
+
tsPlugins,
|
|
164
|
+
tsStrict,
|
|
165
|
+
tsStylistic,
|
|
166
|
+
tsVanillaPlugins,
|
|
167
|
+
vanillaConfigs,
|
|
168
|
+
vanillaPlugins,
|
|
169
|
+
variables,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export default getConfig;
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "eslint-config-vylda-typescript-react",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Eslint Typescript rules for JS and TS React projects",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"eslint",
|
|
9
|
+
"eslint-config",
|
|
10
|
+
"typescript",
|
|
11
|
+
"react",
|
|
12
|
+
"js",
|
|
13
|
+
"ts",
|
|
14
|
+
"js-react",
|
|
15
|
+
"ts-react",
|
|
16
|
+
"js-typescript",
|
|
17
|
+
"ts-typescript",
|
|
18
|
+
"typescript-react",
|
|
19
|
+
"typescript-js",
|
|
20
|
+
"typescript-ts",
|
|
21
|
+
"typescript-js-react",
|
|
22
|
+
"typescript-ts-react",
|
|
23
|
+
"typescript-react-js",
|
|
24
|
+
"typescript-react-ts",
|
|
25
|
+
"typescript-react-jsx",
|
|
26
|
+
"typescript-react-tsx",
|
|
27
|
+
"typescript-jsx",
|
|
28
|
+
"typescript-tsx"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"inspect": "npx @eslint/config-inspector",
|
|
32
|
+
"lint": "eslint . && tsc --noEmit",
|
|
33
|
+
"test": "eslint . && tsc --noEmit",
|
|
34
|
+
"ts": "tsc --noEmit",
|
|
35
|
+
"prepare": "husky"
|
|
36
|
+
},
|
|
37
|
+
"author": "Vilem Lipold, vilem.lipold@seznam.cz",
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://gitlab.com/Vylda/eslint-config-vylda-typescript-react/-/issues"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://gitlab.com/Vylda/eslint-config-vylda-typescript-react.git"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://gitlab.com/Vylda/eslint-config-vylda-typescript-react",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=18"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@eslint/config-inspector": "^1.3.0",
|
|
52
|
+
"husky": "^9.1.7",
|
|
53
|
+
"typescript": "^5.9.3"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"eslint": "^9.28.0",
|
|
57
|
+
"eslint-config-vylda-typescript": "^5.4.1",
|
|
58
|
+
"eslint-config-vylda-vanilla-react": "^4.1.3",
|
|
59
|
+
"eslint-import-resolver-typescript": "^4.4.2",
|
|
60
|
+
"typescript-eslint": "^8.33.0"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import {
|
|
3
|
+
defaultImportExtensions as tsDie,
|
|
4
|
+
defaultImportExtensionsRuleGranularOption as tsDiergo,
|
|
5
|
+
defaultImportNoExtraneousDependenciesDevDependencies as tsDineddd,
|
|
6
|
+
defaultImportResolverNodeExtensions as tsDirnde,
|
|
7
|
+
} from 'eslint-config-vylda-typescript';
|
|
8
|
+
import {
|
|
9
|
+
defaultImportExtensions as reDie,
|
|
10
|
+
defaultImportExtensionsRuleGranularOption as reDiergo,
|
|
11
|
+
defaultImportResolverNodeExtensions as reDirnde,
|
|
12
|
+
} from 'eslint-config-vylda-vanilla-react';
|
|
13
|
+
|
|
14
|
+
const die = Array.from(new Set(['.tsx', ...reDie, ...tsDie]));
|
|
15
|
+
const diergo = { ...tsDiergo, ...reDiergo, tsx: 'never' };
|
|
16
|
+
const dirnde = Array.from(new Set(['.tsx', ...reDirnde, ...tsDirnde]));
|
|
17
|
+
|
|
18
|
+
export const defaultImportExtensions = die;
|
|
19
|
+
export const defaultImportExtensionsRuleGranularOption = diergo;
|
|
20
|
+
export const defaultImportResolverNodeExtensions = dirnde;
|
|
21
|
+
export const defaultImportNoExtraneousDependenciesDevDependencies = tsDineddd;
|
package/rules/react.mjs
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
a11y, react as basicReactConfig, hooks, reactStylistic,
|
|
3
|
+
} from 'eslint-config-vylda-vanilla-react';
|
|
4
|
+
|
|
5
|
+
const updateJsxFilenameExtensionRule = () => {
|
|
6
|
+
const [{ name: ruleName, rules: baseReactRules, ...restReactConfig }] = basicReactConfig;
|
|
7
|
+
|
|
8
|
+
const jsfRule = baseReactRules['react/jsx-filename-extension'];
|
|
9
|
+
|
|
10
|
+
const [type, options] = jsfRule;
|
|
11
|
+
|
|
12
|
+
if (!type || !options || typeof options === 'string') {
|
|
13
|
+
return basicReactConfig;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const { extensions, ignoreFilesWithoutCode } = options;
|
|
17
|
+
const updatedExtensions = [...extensions, 'tsx'];
|
|
18
|
+
|
|
19
|
+
const newRule = [
|
|
20
|
+
type,
|
|
21
|
+
{
|
|
22
|
+
extensions: updatedExtensions,
|
|
23
|
+
ignoreFilesWithoutCode,
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
baseReactRules['react/jsx-filename-extension'] = newRule;
|
|
28
|
+
|
|
29
|
+
return [{
|
|
30
|
+
...restReactConfig,
|
|
31
|
+
name: `typescript-react/react extends from ${ruleName}`,
|
|
32
|
+
rules: baseReactRules,
|
|
33
|
+
}];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const react = updateJsxFilenameExtensionRule();
|
|
37
|
+
|
|
38
|
+
const config = [
|
|
39
|
+
...a11y,
|
|
40
|
+
...hooks,
|
|
41
|
+
...react,
|
|
42
|
+
...reactStylistic,
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
export default config;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const config = [
|
|
2
|
+
{
|
|
3
|
+
name: 'typescript-react/off',
|
|
4
|
+
rules: {
|
|
5
|
+
// TypeScript automatically guards through the type system
|
|
6
|
+
'react/jsx-no-undef': 'off',
|
|
7
|
+
|
|
8
|
+
// False positive with TS type alias
|
|
9
|
+
'react/no-unused-prop-types': 'off',
|
|
10
|
+
|
|
11
|
+
// TypeScript solved with question mark after property name
|
|
12
|
+
'react/require-default-props': 'off',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
export default config;
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"allowJs": true,
|
|
4
|
+
"checkJs": false,
|
|
5
|
+
"esModuleInterop": true,
|
|
6
|
+
"jsx": "react-jsx",
|
|
7
|
+
"module": "nodenext",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"target": "ES2024"
|
|
10
|
+
},
|
|
11
|
+
"exclude": [
|
|
12
|
+
"node_modules"
|
|
13
|
+
],
|
|
14
|
+
"include": ["*.js", "*.jsx", "*.mjs", "*.mts", "*.ts", "*.tsx", "**/*.d.ts"],
|
|
15
|
+
}
|