@mikey-pro/eslint-config 3.2.10 → 3.2.11

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 (2) hide show
  1. package/index.js +528 -0
  2. package/package.json +3 -3
package/index.js ADDED
@@ -0,0 +1,528 @@
1
+ module.exports = {
2
+ extends: [
3
+ 'airbnb',
4
+ 'standard',
5
+ 'eslint:recommended',
6
+ 'plugin:unicorn/all',
7
+ 'plugin:github/recommended',
8
+ 'plugin:jsx-a11y/recommended',
9
+ 'plugin:sonarjs/recommended',
10
+ 'plugin:compat/recommended',
11
+ 'plugin:css-modules/recommended',
12
+ 'plugin:prettier/recommended',
13
+ ],
14
+ overrides: [
15
+ {
16
+ files: ['*.ts'],
17
+ parser: '@typescript-eslint/parser',
18
+ parserOptions: {
19
+ tsconfigRootDir: __dirname,
20
+ project: ['../../../tsconfig.json'],
21
+ extraFileExtensions: ['.vue', '.svelte'],
22
+ sourceType: 'module',
23
+ ecmaVersion: 'latest',
24
+ ecmaFeatures: {
25
+ jsx: true,
26
+ },
27
+ },
28
+ plugins: ['@typescript-eslint'],
29
+ extends: [
30
+ 'airbnb-typescript',
31
+ 'plugin:@typescript-eslint/recommended',
32
+ 'plugin:@typescript-eslint/recommended-requiring-type-checking',
33
+ ],
34
+ rules: {
35
+ 'import/named': 0,
36
+ 'import/namespace': 0,
37
+ 'import/default': 0,
38
+ 'import/no-named-as-default-member': 0,
39
+ '@typescript-eslint/indent': 0,
40
+ '@typescript-eslint/naming-convention': 0,
41
+ 'prettier/prettier': [2, { parser: 'typescript' }],
42
+ },
43
+ },
44
+ {
45
+ files: ['*.tsx'],
46
+ parser: '@typescript-eslint/parser',
47
+ extends: [
48
+ 'airbnb-typescript',
49
+ 'plugin:react/recommended',
50
+ 'plugin:react-hooks/recommended',
51
+ 'plugin:@typescript-eslint/recommended',
52
+ 'plugin:@typescript-eslint/recommended-requiring-type-checking',
53
+ ],
54
+ plugins: ['@typescript-eslint', 'react', 'react-hooks'],
55
+ parserOptions: {
56
+ tsconfigRootDir: __dirname,
57
+ project: ['../../../tsconfig.json'],
58
+ extraFileExtensions: ['.vue', '.svelte'],
59
+ sourceType: 'module',
60
+ ecmaVersion: 'latest',
61
+ ecmaFeatures: {
62
+ jsx: true,
63
+ },
64
+ },
65
+ rules: {
66
+ 'import/named': 0,
67
+ 'import/namespace': 0,
68
+ 'import/default': 0,
69
+ 'import/no-named-as-default-member': 0,
70
+ '@typescript-eslint/naming-convention': 0,
71
+ '@typescript-eslint/indent': 0,
72
+ 'react/state-in-constructor': 0,
73
+ 'react/no-deprecated': 2,
74
+ 'react/react-in-jsx-scope': 0,
75
+ 'react/display-name': [1, { ignoreTranspilerName: false }],
76
+ 'react/jsx-no-bind': [
77
+ 1,
78
+ {
79
+ ignoreRefs: true,
80
+ allowFunctions: true,
81
+ allowArrowFunctions: true,
82
+ },
83
+ ],
84
+ 'react/no-string-refs': 2,
85
+ 'react/no-find-dom-node': 2,
86
+ 'react/jsx-no-comment-textnodes': 2,
87
+ 'react/jsx-curly-spacing': 2,
88
+ 'react/jsx-no-undef': 2,
89
+ 'react/jsx-uses-react': 2,
90
+ 'react/jsx-uses-vars': 2,
91
+ 'react/function-component-definition': 0,
92
+ 'react/jsx-no-duplicate-props': 2,
93
+ 'react/jsx-no-target-blank': 2,
94
+ 'react/jsx-tag-spacing': [2, { beforeSelfClosing: 'always' }],
95
+ 'react/jsx-key': [2, { checkFragmentShorthand: true }],
96
+ 'react/self-closing-comp': 2,
97
+ 'react/prefer-es6-class': 2,
98
+ 'react/prefer-stateless-function': 1,
99
+ 'react/require-render-return': 2,
100
+ 'react/no-danger': 1,
101
+ 'react/no-did-mount-set-state': 2,
102
+ 'react/no-did-update-set-state': 2,
103
+ 'react/no-is-mounted': 2,
104
+ 'react-hooks/rules-of-hooks': 2,
105
+ 'react-hooks/exhaustive-deps': 1,
106
+ 'prettier/prettier': [2, { parser: 'typescript' }],
107
+ },
108
+ },
109
+ {
110
+ files: ['*.css'],
111
+ rules: {
112
+ 'prettier/prettier': [2, { parser: 'css' }],
113
+ },
114
+ },
115
+ {
116
+ files: ['*.scss'],
117
+ rules: {
118
+ 'prettier/prettier': [2, { parser: 'scss' }],
119
+ },
120
+ },
121
+ {
122
+ files: ['*.less'],
123
+ rules: {
124
+ 'prettier/prettier': [2, { parser: 'less' }],
125
+ },
126
+ },
127
+ {
128
+ files: ['*.yaml', '*.yml'],
129
+ plugins: ['yaml'],
130
+ extends: ['plugin:yaml/recommended'],
131
+ rules: {
132
+ 'prettier/prettier': [2, { parser: 'yaml' }],
133
+ },
134
+ },
135
+ {
136
+ files: ['*.toml'],
137
+ parser: 'toml-eslint-parser',
138
+ extends: ['plugin:toml/standard'],
139
+ rules: {
140
+ 'prettier/prettier': 0,
141
+ },
142
+ },
143
+ {
144
+ files: ['*.jsx'],
145
+ extends: ['plugin:react/recommended', 'plugin:react-hooks/recommended'],
146
+ plugins: ['react', 'react-hooks'],
147
+ parser: '@babel/eslint-parser',
148
+ parserOptions: {
149
+ requireConfigFile: false,
150
+ ecmaVersion: 'latest',
151
+ sourceType: 'module',
152
+ babelOptions: {
153
+ presets: [
154
+ [
155
+ '@babel/preset-env',
156
+ {
157
+ targets: {
158
+ node: 'current',
159
+ },
160
+ },
161
+ ],
162
+ '@babel/preset-react',
163
+ 'airbnb',
164
+ ],
165
+ },
166
+ },
167
+ rules: {
168
+ 'react/no-deprecated': 2,
169
+ 'react/react-in-jsx-scope': 0,
170
+ 'react/display-name': [1, { ignoreTranspilerName: false }],
171
+ 'react/jsx-no-bind': [
172
+ 1,
173
+ {
174
+ ignoreRefs: true,
175
+ allowFunctions: true,
176
+ allowArrowFunctions: true,
177
+ },
178
+ ],
179
+ 'react/no-string-refs': 2,
180
+ 'react/no-find-dom-node': 2,
181
+ 'react/jsx-no-comment-textnodes': 2,
182
+ 'react/jsx-curly-spacing': 2,
183
+ 'react/jsx-no-undef': 2,
184
+ 'react/jsx-uses-react': 2,
185
+ 'react/jsx-uses-vars': 2,
186
+ 'react/function-component-definition': 0,
187
+ 'react/state-in-constructor': 0,
188
+ 'react/jsx-no-duplicate-props': 2,
189
+ 'react/jsx-no-target-blank': 2,
190
+ 'react/jsx-tag-spacing': [2, { beforeSelfClosing: 'always' }],
191
+ 'react/jsx-key': [2, { checkFragmentShorthand: true }],
192
+ 'react/self-closing-comp': 2,
193
+ 'react/prefer-es6-class': 2,
194
+ 'react/prefer-stateless-function': 1,
195
+ 'react/require-render-return': 2,
196
+ 'react/no-danger': 1,
197
+ 'react/no-did-mount-set-state': 2,
198
+ 'react/no-did-update-set-state': 2,
199
+ 'react/no-is-mounted': 2,
200
+ 'react-hooks/rules-of-hooks': 2,
201
+ 'react-hooks/exhaustive-deps': 1,
202
+ },
203
+ },
204
+ {
205
+ files: ['*.md'],
206
+ parser: 'markdown-eslint-parser',
207
+ extends: ['plugin:md/recommended'],
208
+ rules: {
209
+ 'md/remark': [
210
+ 2,
211
+ {
212
+ plugins: [
213
+ 'preset-lint-markdown-style-guide',
214
+ ['lint-emphasis-marker', '_'],
215
+ ],
216
+ },
217
+ ],
218
+ 'prettier/prettier': [2, { parser: 'markdown' }],
219
+ },
220
+ },
221
+ {
222
+ files: ['*.md.json'],
223
+ rules: {
224
+ 'prettier/prettier': [2, { parser: 'json' }],
225
+ },
226
+ },
227
+ {
228
+ files: ['*.html'],
229
+ parser: '@html-eslint/parser',
230
+ extends: ['plugin:@html-eslint/recommended'],
231
+ plugins: ['@html-eslint'],
232
+ rules: {
233
+ 'spaced-comment': 0,
234
+ '@html-eslint/indent': 0,
235
+ '@html-eslint/no-extra-spacing-attrs': 0,
236
+ '@html-eslint/require-closing-tags': 0,
237
+ 'disable-autofix/@html-eslint/require-closing-tags': [
238
+ 2,
239
+ { selfClosing: 'always' },
240
+ ],
241
+ 'prettier/prettier': [2, { parser: 'html' }],
242
+ },
243
+ },
244
+ {
245
+ files: ['*.vue'],
246
+ parser: 'vue-eslint-parser',
247
+ extends: ['plugin:vue/vue3-recommended', '@vue/airbnb'],
248
+ parserOptions: {
249
+ requireConfigFile: false,
250
+ ecmaVersion: 'latest',
251
+ sourceType: 'module',
252
+ babelOptions: {
253
+ presets: [
254
+ [
255
+ '@babel/preset-env',
256
+ {
257
+ targets: {
258
+ node: 'current',
259
+ },
260
+ },
261
+ ],
262
+ ],
263
+ plugins: [
264
+ 'eslint-plugin-vue',
265
+ [
266
+ '@babel/plugin-transform-react-jsx',
267
+ {
268
+ pragma: 'h',
269
+ pragmaFrag: 'Fragment',
270
+ },
271
+ ],
272
+ ],
273
+ },
274
+ },
275
+ rules: {
276
+ 'vue/html-self-closing': [
277
+ 2,
278
+ {
279
+ html: {
280
+ void: 'always',
281
+ normal: 'always',
282
+ component: 'always',
283
+ },
284
+ svg: 'always',
285
+ math: 'always',
286
+ },
287
+ ],
288
+ 'vue/component-tags-order': [
289
+ 2,
290
+ {
291
+ order: [['script', 'template'], 'style'],
292
+ },
293
+ ],
294
+ 'prettier/prettier': 0,
295
+ },
296
+ },
297
+ {
298
+ files: ['*.svelte'],
299
+ processor: 'svelte3/svelte3',
300
+ plugins: ['svelte3'],
301
+ rules: {
302
+ 'import/first': 0,
303
+ 'import/no-duplicates': 0,
304
+ 'import/no-mutable-exports': 0,
305
+ 'import/no-unresolved': 0,
306
+ 'prettier/prettier': 0,
307
+ },
308
+ },
309
+ {
310
+ files: ['*.json', '*.jsonc', '*rc'],
311
+ extends: ['plugin:jsonc/all'],
312
+ parser: 'jsonc-eslint-parser',
313
+ plugins: ['json-format'],
314
+ rules: {
315
+ 'prettier/prettier': [2, { parser: 'json' }],
316
+ },
317
+ },
318
+ {
319
+ files: ['*.json5'],
320
+ extends: ['plugin:jsonc/all'],
321
+ parser: 'jsonc-eslint-parser',
322
+ rules: {
323
+ 'prettier/prettier': [2, { parser: 'json5' }],
324
+ },
325
+ },
326
+ ],
327
+ env: {
328
+ browser: true,
329
+ node: true,
330
+ es6: true,
331
+ commonjs: true,
332
+ es2021: true,
333
+ },
334
+ rules: {
335
+ 'no-restricted-syntax': [
336
+ 2,
337
+ {
338
+ selector: 'ForInStatement',
339
+ message:
340
+ 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.',
341
+ },
342
+ {
343
+ selector: 'LabeledStatement',
344
+ message:
345
+ 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.',
346
+ },
347
+ {
348
+ selector: 'WithStatement',
349
+ message:
350
+ '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.',
351
+ },
352
+ ],
353
+ camelcase: 0,
354
+ 'no-console': 0,
355
+ 'func-names': 0,
356
+ 'no-process-exit': 0,
357
+ 'class-methods-use-this': 0,
358
+ 'no-underscore-dangle': 0,
359
+ 'import/no-unresolved': [
360
+ 2,
361
+ { commonjs: true, amd: true, ignore: ['^node:'] },
362
+ ],
363
+ 'import/order': [
364
+ 2,
365
+ {
366
+ alphabetize: {
367
+ order: 'asc',
368
+ },
369
+ 'newlines-between': 'always',
370
+ },
371
+ ],
372
+ 'import/extensions': ['error', 'always', { ignorePackages: true }],
373
+ 'eslint-comments/no-use': [
374
+ 'error',
375
+ { allow: ['eslint-disable', 'eslint-disable-next-line'] },
376
+ ],
377
+ 'prefer-destructuring': [
378
+ 'error',
379
+ {
380
+ object: true,
381
+ array: false,
382
+ },
383
+ ],
384
+ 'keyword-spacing': 2,
385
+ 'require-atomic-updates': 0,
386
+ 'import/no-commonjs': 0,
387
+ 'sort-imports': 0,
388
+ 'constructor-super': 2,
389
+ 'no-caller': 2,
390
+ 'no-const-assign': 2,
391
+ 'no-delete-var': 2,
392
+ 'no-dupe-class-members': 2,
393
+ 'no-dupe-keys': 2,
394
+ 'no-duplicate-imports': 2,
395
+ 'no-else-return': 1,
396
+ 'no-empty-pattern': 0,
397
+ 'no-empty': 0,
398
+ 'no-extra-parens': 0,
399
+ 'no-iterator': 2,
400
+ 'no-lonely-if': 2,
401
+ 'no-mixed-spaces-and-tabs': [1, 'smart-tabs'],
402
+ 'no-multi-str': 1,
403
+ 'no-new-wrappers': 2,
404
+ 'no-proto': 2,
405
+ 'no-redeclare': 2,
406
+ 'no-shadow-restricted-names': 2,
407
+ 'no-shadow': 0,
408
+ 'no-spaced-func': 2,
409
+ 'no-this-before-super': 2,
410
+ 'no-undef-init': 2,
411
+ 'no-unneeded-ternary': 2,
412
+ 'no-unused-vars': [
413
+ 2,
414
+ {
415
+ args: 'after-used',
416
+ ignoreRestSiblings: true,
417
+ },
418
+ ],
419
+ 'no-useless-call': 1,
420
+ 'no-useless-computed-key': 1,
421
+ 'no-useless-concat': 1,
422
+ 'no-useless-constructor': 1,
423
+ 'no-useless-escape': 1,
424
+ 'no-useless-rename': 1,
425
+ 'no-var': 1,
426
+ 'no-with': 2,
427
+ semi: 0,
428
+ strict: [2, 'never'],
429
+ 'object-curly-spacing': [0, 'always'],
430
+ 'rest-spread-spacing': 0,
431
+ 'space-before-function-paren': [0, 'always'],
432
+ 'space-in-parens': [0, 'never'],
433
+ 'object-shorthand': 1,
434
+ 'prefer-arrow-callback': 1,
435
+ 'prefer-rest-params': 1,
436
+ 'prefer-spread': 1,
437
+ 'prefer-template': 1,
438
+ quotes: [
439
+ 0,
440
+ 'single',
441
+ {
442
+ avoidEscape: true,
443
+ allowTemplateLiterals: true,
444
+ },
445
+ ],
446
+ 'quote-props': [2, 'as-needed'],
447
+ radix: 1,
448
+ 'unicode-bom': 2,
449
+ 'valid-jsdoc': 0,
450
+ 'spaced-comment': [
451
+ 2,
452
+ 'always',
453
+ {
454
+ line: {
455
+ markers: ['/'],
456
+ exceptions: ['-', '+'],
457
+ },
458
+ block: {
459
+ markers: ['!'],
460
+ exceptions: ['*'],
461
+ balanced: true,
462
+ },
463
+ },
464
+ ],
465
+ 'unicorn/import-index': [2, { ignoreImports: true }],
466
+ 'filenames/match-regex': 0,
467
+ 'unicorn/filename-case': [
468
+ 2,
469
+ {
470
+ cases: {
471
+ camelCase: true,
472
+ pascalCase: true,
473
+ },
474
+ ignore: ['README.md'],
475
+ },
476
+ ],
477
+ 'prettier/prettier': [2, { parser: 'babel' }],
478
+ },
479
+ plugins: [
480
+ 'import',
481
+ 'prettier',
482
+ 'css-modules',
483
+ 'disable-autofix',
484
+ '@babel',
485
+ 'unicorn',
486
+ 'sonarjs',
487
+ 'github',
488
+ ],
489
+ ignorePatterns: [
490
+ '!.*',
491
+ 'node_modules',
492
+ 'vendor',
493
+ 'dist',
494
+ 'package-lock.json',
495
+ 'LICENSE',
496
+ '.vscode',
497
+ '.github',
498
+ 'tsconfig.json',
499
+ ],
500
+ root: true,
501
+ settings: {
502
+ 'json/sort-package-json': 'pro',
503
+ polyfills: ['Promise'],
504
+ react: {
505
+ pragma: 'h',
506
+ version: 'preact',
507
+ },
508
+ },
509
+ parser: '@babel/eslint-parser',
510
+ parserOptions: {
511
+ requireConfigFile: false,
512
+ ecmaVersion: 'latest',
513
+ sourceType: 'module',
514
+ babelOptions: {
515
+ presets: [
516
+ [
517
+ '@babel/preset-env',
518
+ {
519
+ targets: {
520
+ node: 'current',
521
+ },
522
+ },
523
+ ],
524
+ 'airbnb',
525
+ ],
526
+ },
527
+ },
528
+ };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@mikey-pro/eslint-config",
3
- "version": "3.2.10",
3
+ "version": "3.2.11",
4
4
  "description": "Mikey Pro ESLint configuration",
5
- "main": "index.cjs",
5
+ "main": "index.js",
6
6
  "dependencies": {
7
7
  "@babel/core": "^7.16.5",
8
8
  "@babel/eslint-parser": "^7.16",
@@ -47,7 +47,7 @@
47
47
  "eslint": ">=8.3.0"
48
48
  },
49
49
  "files": [
50
- "index.cjs",
50
+ "index.js",
51
51
  "README.md",
52
52
  "LICENSE"
53
53
  ],