@fullstacksjs/eslint-config 14.1.0 → 14.3.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.
@@ -39,37 +39,33 @@ function react(options = {}) {
39
39
  }
40
40
  },
41
41
  rules: {
42
- '@eslint-react/dom/no-void-elements-with-children': 'warn',
43
- '@eslint-react/dom/no-dangerously-set-innerhtml-with-children': 'error',
44
- '@eslint-react/dom/no-dangerously-set-innerhtml': 'off',
45
- '@eslint-react/dom/no-find-dom-node': 'error',
46
- '@eslint-react/dom/no-flush-sync': 'off',
47
- '@eslint-react/dom/no-use-form-state': 'warn',
48
- '@eslint-react/dom/no-hydrate': 'warn',
49
- '@eslint-react/dom/no-missing-button-type': 'warn',
50
- '@eslint-react/dom/no-missing-iframe-sandbox': 'warn',
51
- '@eslint-react/dom/no-namespace': 'error',
52
- '@eslint-react/dom/no-render-return-value': 'error',
53
- '@eslint-react/dom/no-render': 'warn',
54
- '@eslint-react/dom/no-script-url': 'warn',
55
- '@eslint-react/dom/no-unsafe-iframe-sandbox': 'warn',
56
- '@eslint-react/dom/no-unsafe-target-blank': 'warn',
57
- '@eslint-react/jsx-dollar': 'warn',
58
- '@eslint-react/jsx-key-before-spread': 'error',
59
- '@eslint-react/jsx-no-undef': 'off',
60
- '@eslint-react/jsx-no-iife': 'warn',
61
- '@eslint-react/jsx-no-duplicate-props': 'error',
42
+ '@eslint-react/dom-no-void-elements-with-children': 'warn',
43
+ '@eslint-react/dom-no-dangerously-set-innerhtml-with-children': 'error',
44
+ '@eslint-react/dom-no-dangerously-set-innerhtml': 'off',
45
+ '@eslint-react/dom-no-find-dom-node': 'error',
46
+ '@eslint-react/dom-no-flush-sync': 'off',
47
+ '@eslint-react/dom-no-use-form-state': 'warn',
48
+ '@eslint-react/dom-no-hydrate': 'warn',
49
+ '@eslint-react/dom-no-missing-button-type': 'warn',
50
+ '@eslint-react/dom-no-missing-iframe-sandbox': 'warn',
51
+ '@eslint-react/dom-no-render-return-value': 'error',
52
+ '@eslint-react/dom-no-render': 'warn',
53
+ '@eslint-react/dom-no-script-url': 'warn',
54
+ '@eslint-react/dom-no-string-style-prop': 'error',
55
+ '@eslint-react/dom-no-unsafe-iframe-sandbox': 'warn',
56
+ '@eslint-react/dom-no-unsafe-target-blank': 'warn',
62
57
  '@eslint-react/jsx-no-comment-textnodes': 'warn',
63
- '@eslint-react/jsx-uses-react': 'off',
64
- '@eslint-react/jsx-shorthand-boolean': 'warn',
65
- '@eslint-react/jsx-shorthand-fragment': 'warn',
58
+ '@eslint-react/jsx-no-children-prop': 'warn',
59
+ '@eslint-react/jsx-no-children-prop-with-children': 'warn',
60
+ '@eslint-react/jsx-no-key-after-spread': 'error',
61
+ '@eslint-react/jsx-no-useless-fragment': 'warn',
62
+ '@eslint-react/jsx-no-namespace': 'error',
66
63
  '@eslint-react/no-access-state-in-setstate': 'error',
67
64
  '@eslint-react/no-array-index-key': 'warn',
68
65
  '@eslint-react/no-children-count': 'warn',
69
66
  '@eslint-react/no-children-for-each': 'warn',
70
67
  '@eslint-react/no-children-map': 'warn',
71
68
  '@eslint-react/no-children-only': 'warn',
72
- '@eslint-react/no-children-prop': 'warn',
73
69
  '@eslint-react/no-children-to-array': 'warn',
74
70
  '@eslint-react/no-clone-element': 'warn',
75
71
  '@eslint-react/no-component-will-mount': 'error',
@@ -85,11 +81,9 @@ function react(options = {}) {
85
81
  '@eslint-react/no-misused-capture-owner-stack': 'error',
86
82
  '@eslint-react/no-nested-component-definitions': 'warn',
87
83
  '@eslint-react/no-nested-lazy-component-declarations': 'error',
88
- '@eslint-react/no-redundant-should-component-update': 'error',
89
84
  '@eslint-react/no-set-state-in-component-did-mount': 'warn',
90
85
  '@eslint-react/no-set-state-in-component-did-update': 'warn',
91
86
  '@eslint-react/no-set-state-in-component-will-update': 'warn',
92
- '@eslint-react/dom/no-string-style-prop': 'error',
93
87
  '@eslint-react/no-unsafe-component-will-mount': 'warn',
94
88
  '@eslint-react/no-unsafe-component-will-receive-props': 'warn',
95
89
  '@eslint-react/no-unsafe-component-will-update': 'warn',
@@ -97,33 +91,22 @@ function react(options = {}) {
97
91
  '@eslint-react/no-unstable-default-props': 'error',
98
92
  '@eslint-react/no-unused-class-component-members': 'warn',
99
93
  '@eslint-react/no-unused-state': 'warn',
100
- ...(0, _conditions.predicate)(projectService, {
101
- '@eslint-react/no-implicit-key': 'error',
102
- '@eslint-react/no-unused-props': 'warn'
103
- }),
104
- '@eslint-react/no-useless-forward-ref': 'off',
105
- '@eslint-react/no-useless-fragment': 'warn',
106
94
  '@eslint-react/no-use-context': 'warn',
107
- '@eslint-react/no-unnecessary-use-callback': 'warn',
108
- '@eslint-react/no-unnecessary-use-memo': 'warn',
109
95
  '@eslint-react/no-unnecessary-use-prefix': 'warn',
110
- '@eslint-react/no-unnecessary-key': 'warn',
111
- '@eslint-react/prefer-use-state-lazy-initialization': 'warn',
112
- '@eslint-react/prefer-destructuring-assignment': 'warn',
113
- '@eslint-react/hooks-extra/no-direct-set-state-in-use-effect': 'off',
114
- '@eslint-react/naming-convention/component-name': 'warn',
115
- '@eslint-react/naming-convention/context-name': 'warn',
116
- '@eslint-react/naming-convention/id-name': 'warn',
117
- '@eslint-react/naming-convention/ref-name': 'warn',
118
- '@eslint-react/naming-convention/use-state': ['warn', {
96
+ '@eslint-react/naming-convention-context-name': 'warn',
97
+ '@eslint-react/naming-convention-id-name': 'warn',
98
+ '@eslint-react/naming-convention-ref-name': 'warn',
99
+ '@eslint-react/use-state': ['warn', {
119
100
  enforceAssignment: true,
120
- enforceSetterName: false
101
+ enforceSetterName: false,
102
+ enforceLazyInitialization: true
121
103
  }],
122
- '@eslint-react/web-api/no-leaked-timeout': 'error',
123
- '@eslint-react/web-api/no-leaked-event-listener': 'error',
124
- '@eslint-react/web-api/no-leaked-interval': 'error',
125
- '@eslint-react/web-api/no-leaked-resize-observer': 'error',
126
- '@eslint-react/rsc/function-definition': 'error',
104
+ '@eslint-react/web-api-no-leaked-timeout': 'error',
105
+ '@eslint-react/web-api-no-leaked-event-listener': 'error',
106
+ '@eslint-react/web-api-no-leaked-interval': 'error',
107
+ '@eslint-react/web-api-no-leaked-resize-observer': 'error',
108
+ '@eslint-react/web-api-no-leaked-fetch': 'error',
109
+ '@eslint-react/rsc-function-definition': 'error',
127
110
  'react-hooks/rules-of-hooks': 'error',
128
111
  'react-hooks/exhaustive-deps': 'warn',
129
112
  'react-hooks/config': 'error',
@@ -29,7 +29,9 @@ async function tailwind(options = {}) {
29
29
  'better-tailwindcss/no-conflicting-classes': 'error',
30
30
  'better-tailwindcss/no-unnecessary-whitespace': 'warn',
31
31
  'better-tailwindcss/enforce-canonical-classes': 'warn',
32
+ 'better-tailwindcss/enforce-logical-properties': 'warn',
32
33
  'better-tailwindcss/enforce-consistent-class-order': 'warn',
34
+ 'better-tailwindcss/enforce-consistent-variant-order': 'warn',
33
35
  'better-tailwindcss/enforce-consistent-variable-syntax': 'error',
34
36
  'better-tailwindcss/enforce-shorthand-classes': 'warn',
35
37
  'better-tailwindcss/enforce-consistent-important-position': 'warn'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fullstacksjs/eslint-config",
3
- "version": "14.1.0",
3
+ "version": "14.3.0",
4
4
  "license": "MIT",
5
5
  "author": "fullstacks <fullstacksjs@gmail.com>",
6
6
  "description": "fullstacks eslint config",
@@ -16,7 +16,7 @@
16
16
  "src",
17
17
  "cjs"
18
18
  ],
19
- "packageManager": "npm@11.10.0",
19
+ "packageManager": "npm@11.13.0",
20
20
  "scripts": {
21
21
  "lint": "eslint .",
22
22
  "spell": "cspell ./* --no-progress",
@@ -37,46 +37,46 @@
37
37
  }
38
38
  },
39
39
  "dependencies": {
40
- "@eslint-react/eslint-plugin": "2.13.0",
41
- "@eslint/compat": "2.0.3",
42
- "@next/eslint-plugin-next": "16.1.6",
43
- "@stylistic/eslint-plugin": "5.8.0",
44
- "@vitest/eslint-plugin": "1.6.13",
40
+ "@eslint-react/eslint-plugin": "5.7.2",
41
+ "@eslint/compat": "2.0.5",
42
+ "@next/eslint-plugin-next": "16.2.4",
43
+ "@stylistic/eslint-plugin": "5.10.0",
44
+ "@vitest/eslint-plugin": "1.6.16",
45
45
  "deepmerge": "4.3.1",
46
- "eslint-plugin-better-tailwindcss": "4.3.2",
47
- "eslint-plugin-cypress": "5.3.0",
46
+ "eslint-plugin-better-tailwindcss": "4.5.0",
47
+ "eslint-plugin-cypress": "6.4.0",
48
48
  "eslint-plugin-import-x": "4.16.2",
49
- "eslint-plugin-jest": "29.15.1",
49
+ "eslint-plugin-jest": "29.15.2",
50
50
  "eslint-plugin-jsx-a11y": "6.10.2",
51
- "eslint-plugin-n": "17.24.0",
52
- "eslint-plugin-perfectionist": "5.5.0",
53
- "eslint-plugin-playwright": "2.5.1",
51
+ "eslint-plugin-n": "18.0.0",
52
+ "eslint-plugin-perfectionist": "5.9.0",
53
+ "eslint-plugin-playwright": "2.10.2",
54
54
  "eslint-plugin-prettier": "5.5.5",
55
- "eslint-plugin-promise": "7.2.1",
56
- "eslint-plugin-react-hooks": "7.0.1",
57
- "eslint-plugin-regexp": "3.0.0",
58
- "eslint-plugin-storybook": "10.3.3",
59
- "globals": "17.4.0",
55
+ "eslint-plugin-promise": "7.3.0",
56
+ "eslint-plugin-react-hooks": "7.1.1",
57
+ "eslint-plugin-regexp": "3.1.0",
58
+ "eslint-plugin-storybook": "10.3.6",
59
+ "globals": "17.6.0",
60
60
  "local-pkg": "1.1.2",
61
- "typescript-eslint": "8.56.0"
61
+ "typescript-eslint": "8.59.2"
62
62
  },
63
63
  "devDependencies": {
64
64
  "@eslint/eslintrc": "3.3.5",
65
- "@eslint/js": "9.39.2",
65
+ "@eslint/js": "10.0.1",
66
66
  "@semantic-release/github": "12.0.6",
67
67
  "@semantic-release/npm": "13.1.5",
68
68
  "@semantic-release/release-notes-generator": "14.1.0",
69
69
  "@types/eslint": "9.6.1",
70
- "cspell": "9.7.0",
71
- "eslint": "9.39.2",
70
+ "cspell": "10.0.0",
71
+ "eslint": "10.3.0",
72
72
  "husky": "9.1.7",
73
73
  "jest": "30.3.0",
74
74
  "lint-staged": "16.4.0",
75
75
  "pinst": "3.0.0",
76
- "prettier": "3.8.1",
76
+ "prettier": "3.8.3",
77
77
  "semantic-release": "25.0.3",
78
- "storybook": "10.3.3",
79
- "typescript": "5.9.3",
78
+ "storybook": "10.3.6",
79
+ "typescript": "6.0.3",
80
80
  "unbuild": "3.6.1"
81
81
  },
82
82
  "peerDependencies": {
@@ -33,31 +33,28 @@ function react(options = {}) {
33
33
  },
34
34
  },
35
35
  rules: {
36
- '@eslint-react/dom/no-void-elements-with-children': 'warn',
37
- '@eslint-react/dom/no-dangerously-set-innerhtml-with-children': 'error',
38
- '@eslint-react/dom/no-dangerously-set-innerhtml': 'off',
39
- '@eslint-react/dom/no-find-dom-node': 'error',
40
- '@eslint-react/dom/no-flush-sync': 'off',
41
- '@eslint-react/dom/no-use-form-state': 'warn',
42
- '@eslint-react/dom/no-hydrate': 'warn',
43
- '@eslint-react/dom/no-missing-button-type': 'warn',
44
- '@eslint-react/dom/no-missing-iframe-sandbox': 'warn',
45
- '@eslint-react/dom/no-namespace': 'error',
46
- '@eslint-react/dom/no-render-return-value': 'error',
47
- '@eslint-react/dom/no-render': 'warn',
48
- '@eslint-react/dom/no-script-url': 'warn',
49
- '@eslint-react/dom/no-unsafe-iframe-sandbox': 'warn',
50
- '@eslint-react/dom/no-unsafe-target-blank': 'warn',
36
+ '@eslint-react/dom-no-void-elements-with-children': 'warn',
37
+ '@eslint-react/dom-no-dangerously-set-innerhtml-with-children': 'error',
38
+ '@eslint-react/dom-no-dangerously-set-innerhtml': 'off',
39
+ '@eslint-react/dom-no-find-dom-node': 'error',
40
+ '@eslint-react/dom-no-flush-sync': 'off',
41
+ '@eslint-react/dom-no-use-form-state': 'warn',
42
+ '@eslint-react/dom-no-hydrate': 'warn',
43
+ '@eslint-react/dom-no-missing-button-type': 'warn',
44
+ '@eslint-react/dom-no-missing-iframe-sandbox': 'warn',
45
+ '@eslint-react/dom-no-render-return-value': 'error',
46
+ '@eslint-react/dom-no-render': 'warn',
47
+ '@eslint-react/dom-no-script-url': 'warn',
48
+ '@eslint-react/dom-no-string-style-prop': 'error',
49
+ '@eslint-react/dom-no-unsafe-iframe-sandbox': 'warn',
50
+ '@eslint-react/dom-no-unsafe-target-blank': 'warn',
51
51
 
52
- '@eslint-react/jsx-dollar': 'warn',
53
- '@eslint-react/jsx-key-before-spread': 'error',
54
- '@eslint-react/jsx-no-undef': 'off',
55
- '@eslint-react/jsx-no-iife': 'warn',
56
- '@eslint-react/jsx-no-duplicate-props': 'error',
57
52
  '@eslint-react/jsx-no-comment-textnodes': 'warn',
58
- '@eslint-react/jsx-uses-react': 'off',
59
- '@eslint-react/jsx-shorthand-boolean': 'warn',
60
- '@eslint-react/jsx-shorthand-fragment': 'warn',
53
+ '@eslint-react/jsx-no-children-prop': 'warn',
54
+ '@eslint-react/jsx-no-children-prop-with-children': 'warn',
55
+ '@eslint-react/jsx-no-key-after-spread': 'error',
56
+ '@eslint-react/jsx-no-useless-fragment': 'warn',
57
+ '@eslint-react/jsx-no-namespace': 'error',
61
58
 
62
59
  '@eslint-react/no-access-state-in-setstate': 'error',
63
60
  '@eslint-react/no-array-index-key': 'warn',
@@ -65,13 +62,13 @@ function react(options = {}) {
65
62
  '@eslint-react/no-children-for-each': 'warn',
66
63
  '@eslint-react/no-children-map': 'warn',
67
64
  '@eslint-react/no-children-only': 'warn',
68
- '@eslint-react/no-children-prop': 'warn',
69
65
  '@eslint-react/no-children-to-array': 'warn',
70
66
  '@eslint-react/no-clone-element': 'warn',
71
67
  '@eslint-react/no-component-will-mount': 'error',
72
68
  '@eslint-react/no-component-will-receive-props': 'error',
73
69
  '@eslint-react/no-component-will-update': 'error',
74
70
  '@eslint-react/no-context-provider': 'warn',
71
+
75
72
  '@eslint-react/no-create-ref': 'error',
76
73
  '@eslint-react/no-direct-mutation-state': 'error',
77
74
  '@eslint-react/no-duplicate-key': 'error',
@@ -81,11 +78,9 @@ function react(options = {}) {
81
78
  '@eslint-react/no-misused-capture-owner-stack': 'error',
82
79
  '@eslint-react/no-nested-component-definitions': 'warn',
83
80
  '@eslint-react/no-nested-lazy-component-declarations': 'error',
84
- '@eslint-react/no-redundant-should-component-update': 'error',
85
81
  '@eslint-react/no-set-state-in-component-did-mount': 'warn',
86
82
  '@eslint-react/no-set-state-in-component-did-update': 'warn',
87
83
  '@eslint-react/no-set-state-in-component-will-update': 'warn',
88
- '@eslint-react/dom/no-string-style-prop': 'error',
89
84
  '@eslint-react/no-unsafe-component-will-mount': 'warn',
90
85
  '@eslint-react/no-unsafe-component-will-receive-props': 'warn',
91
86
  '@eslint-react/no-unsafe-component-will-update': 'warn',
@@ -93,41 +88,30 @@ function react(options = {}) {
93
88
  '@eslint-react/no-unstable-default-props': 'error',
94
89
  '@eslint-react/no-unused-class-component-members': 'warn',
95
90
  '@eslint-react/no-unused-state': 'warn',
96
- ...predicate(projectService, {
97
- '@eslint-react/no-implicit-key': 'error',
98
- '@eslint-react/no-unused-props': 'warn',
99
- }),
100
- '@eslint-react/no-useless-forward-ref': 'off',
101
- '@eslint-react/no-useless-fragment': 'warn',
91
+
102
92
  '@eslint-react/no-use-context': 'warn',
103
- '@eslint-react/no-unnecessary-use-callback': 'warn',
104
- '@eslint-react/no-unnecessary-use-memo': 'warn',
105
93
  '@eslint-react/no-unnecessary-use-prefix': 'warn',
106
- '@eslint-react/no-unnecessary-key': 'warn',
107
-
108
- '@eslint-react/prefer-use-state-lazy-initialization': 'warn',
109
- '@eslint-react/prefer-destructuring-assignment': 'warn',
110
94
 
111
- '@eslint-react/hooks-extra/no-direct-set-state-in-use-effect': 'off',
95
+ '@eslint-react/naming-convention-context-name': 'warn',
96
+ '@eslint-react/naming-convention-id-name': 'warn',
97
+ '@eslint-react/naming-convention-ref-name': 'warn',
112
98
 
113
- '@eslint-react/naming-convention/component-name': 'warn',
114
- '@eslint-react/naming-convention/context-name': 'warn',
115
- '@eslint-react/naming-convention/id-name': 'warn',
116
- '@eslint-react/naming-convention/ref-name': 'warn',
117
- '@eslint-react/naming-convention/use-state': [
99
+ '@eslint-react/use-state': [
118
100
  'warn',
119
101
  {
120
102
  enforceAssignment: true,
121
103
  enforceSetterName: false,
104
+ enforceLazyInitialization: true,
122
105
  },
123
106
  ],
124
107
 
125
- '@eslint-react/web-api/no-leaked-timeout': 'error',
126
- '@eslint-react/web-api/no-leaked-event-listener': 'error',
127
- '@eslint-react/web-api/no-leaked-interval': 'error',
128
- '@eslint-react/web-api/no-leaked-resize-observer': 'error',
108
+ '@eslint-react/web-api-no-leaked-timeout': 'error',
109
+ '@eslint-react/web-api-no-leaked-event-listener': 'error',
110
+ '@eslint-react/web-api-no-leaked-interval': 'error',
111
+ '@eslint-react/web-api-no-leaked-resize-observer': 'error',
112
+ '@eslint-react/web-api-no-leaked-fetch': 'error',
129
113
 
130
- '@eslint-react/rsc/function-definition': 'error',
114
+ '@eslint-react/rsc-function-definition': 'error',
131
115
 
132
116
  'react-hooks/rules-of-hooks': 'error',
133
117
  'react-hooks/exhaustive-deps': 'warn',
@@ -21,7 +21,9 @@ async function tailwind(options = {}) {
21
21
  'better-tailwindcss/no-conflicting-classes': 'error',
22
22
  'better-tailwindcss/no-unnecessary-whitespace': 'warn',
23
23
  'better-tailwindcss/enforce-canonical-classes': 'warn',
24
+ 'better-tailwindcss/enforce-logical-properties': 'warn',
24
25
  'better-tailwindcss/enforce-consistent-class-order': 'warn',
26
+ 'better-tailwindcss/enforce-consistent-variant-order': 'warn',
25
27
  'better-tailwindcss/enforce-consistent-variable-syntax': 'error',
26
28
  'better-tailwindcss/enforce-shorthand-classes': 'warn',
27
29
  'better-tailwindcss/enforce-consistent-important-position': 'warn',