@azat-io/eslint-config 2.71.0 → 2.73.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.
@@ -1,133 +1,106 @@
1
1
  import { interopDefault } from "../utilities.js";
2
2
  async function react(config) {
3
- if (!config.react) {
4
- return {};
5
- }
6
- let [
7
- reactCompilerPlugin,
8
- reactDomPlugin,
9
- reactHooksPlugin,
10
- reactHooksExtraPlugin,
11
- reactNamingConventionPlugin,
12
- reactPerfPlugin,
13
- reactWebApiPlugin,
14
- reactXPlugin
15
- ] = await Promise.all([
16
- interopDefault(import("eslint-plugin-react-compiler")),
17
- interopDefault(import("eslint-plugin-react-dom")),
18
- interopDefault(import("eslint-plugin-react-hooks")),
19
- interopDefault(import("eslint-plugin-react-hooks-extra")),
20
- interopDefault(import("eslint-plugin-react-naming-convention")),
21
- interopDefault(import("eslint-plugin-react-perf")),
22
- interopDefault(import("eslint-plugin-react-web-api")),
23
- interopDefault(import("eslint-plugin-react-x"))
24
- ]);
25
- let files = ["**/*.jsx"];
26
- if (config.typescript) {
27
- files.push("**/*.tsx");
28
- }
29
- return {
30
- name: "azat-io/react/rules",
31
- files,
32
- plugins: {
33
- "react-compiler": reactCompilerPlugin,
34
- "react-dom": reactDomPlugin,
35
- "react-hooks": reactHooksPlugin,
36
- "react-hooks-extra": reactHooksExtraPlugin,
37
- "react-naming-convention": reactNamingConventionPlugin,
38
- "react-perf": reactPerfPlugin,
39
- "react-web-api": reactWebApiPlugin,
40
- "react-x": reactXPlugin
41
- },
42
- rules: {
43
- "react-compiler/react-compiler": "error",
44
- "react-dom/no-dangerously-set-innerhtml": "error",
45
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
46
- "react-dom/no-find-dom-node": "error",
47
- "react-dom/no-flush-sync": "error",
48
- "react-dom/no-hydrate": "error",
49
- "react-dom/no-missing-button-type": "error",
50
- "react-dom/no-missing-iframe-sandbox": "error",
51
- "react-dom/no-namespace": "error",
52
- "react-dom/no-render": "error",
53
- "react-dom/no-render-return-value": "error",
54
- "react-dom/no-script-url": "error",
55
- "react-dom/no-unknown-property": "error",
56
- "react-dom/no-unsafe-iframe-sandbox": "error",
57
- "react-dom/no-unsafe-target-blank": "error",
58
- "react-dom/no-use-form-state": "error",
59
- "react-dom/no-void-elements-with-children": "error",
60
- "react-hooks/exhaustive-deps": "error",
61
- "react-hooks/rules-of-hooks": "error",
62
- "react-hooks-extra/no-direct-set-state-in-use-effect": "error",
63
- "react-naming-convention/component-name": "error",
64
- "react-naming-convention/context-name": "error",
65
- "react-naming-convention/id-name": "error",
66
- "react-naming-convention/use-state": "error",
67
- "react-perf/jsx-no-jsx-as-prop": "error",
68
- "react-perf/jsx-no-new-array-as-prop": "error",
69
- "react-perf/jsx-no-new-function-as-prop": "error",
70
- "react-perf/jsx-no-new-object-as-prop": "error",
71
- "react-web-api/no-leaked-absolute-orientation-sensor": "error",
72
- "react-web-api/no-leaked-ambient-light-sensor": "error",
73
- "react-web-api/no-leaked-animation-frame": "error",
74
- "react-web-api/no-leaked-broadcast-channel": "error",
75
- "react-web-api/no-leaked-event-listener": "error",
76
- "react-web-api/no-leaked-event-source": "error",
77
- "react-web-api/no-leaked-geolocation": "error",
78
- "react-web-api/no-leaked-gravity-sensor": "error",
79
- "react-web-api/no-leaked-gyroscope": "error",
80
- "react-web-api/no-leaked-idle-callback": "error",
81
- "react-web-api/no-leaked-intersection-observer": "error",
82
- "react-web-api/no-leaked-interval": "error",
83
- "react-web-api/no-leaked-linear-acceleration-sensor": "error",
84
- "react-web-api/no-leaked-magnetometer": "error",
85
- "react-web-api/no-leaked-mutation-observer": "error",
86
- "react-web-api/no-leaked-orientation-sensor": "error",
87
- "react-web-api/no-leaked-performance-observer": "error",
88
- "react-web-api/no-leaked-relative-accelerometer": "error",
89
- "react-web-api/no-leaked-resize-observer": "error",
90
- "react-web-api/no-leaked-timeout": "error",
91
- "react-web-api/no-leaked-websocket": "error",
92
- "react-x/jsx-key-before-spread": "error",
93
- "react-x/jsx-no-duplicate-props": "error",
94
- "react-x/jsx-no-iife": "error",
95
- "react-x/jsx-no-undef": "error",
96
- "react-x/jsx-shorthand-boolean": "error",
97
- "react-x/jsx-shorthand-fragment": "error",
98
- "react-x/jsx-uses-react": "error",
99
- "react-x/jsx-uses-vars": "error",
100
- "react-x/no-access-state-in-setstate": "error",
101
- "react-x/no-array-index-key": "error",
102
- "react-x/no-class-component": "error",
103
- "react-x/no-complex-conditional-rendering": "error",
104
- "react-x/no-component-will-mount": "error",
105
- "react-x/no-component-will-receive-props": "error",
106
- "react-x/no-component-will-update": "error",
107
- "react-x/no-duplicate-key": "error",
108
- "react-x/no-nested-component-definitions": "error",
109
- "react-x/no-unnecessary-key": "error",
110
- "react-x/no-unnecessary-use-callback": "error",
111
- "react-x/no-unnecessary-use-memo": "error",
112
- "react-x/no-unnecessary-use-prefix": "error",
113
- "react-x/no-unsafe-component-will-update": "error",
114
- "react-x/no-unstable-context-value": "error",
115
- "react-x/no-unused-props": "error",
116
- "react-x/no-unused-state": "error",
117
- "react-x/no-use-context": "error",
118
- "react-x/no-useless-fragment": "error",
119
- "react-x/prefer-namespace-import": "error",
120
- "react-x/prefer-use-state-lazy-initialization": "error"
121
- },
122
- settings: {
123
- react: {
124
- fragment: "Fragment",
125
- pragma: "React",
126
- version: "detect"
127
- }
128
- }
129
- };
3
+ if (!config.react) return {};
4
+ let [reactCompilerPlugin, reactDomPlugin, reactHooksPlugin, reactNamingConventionPlugin, reactPerfPlugin, reactWebApiPlugin, reactXPlugin] = await Promise.all([
5
+ interopDefault(import("eslint-plugin-react-compiler")),
6
+ interopDefault(import("eslint-plugin-react-dom")),
7
+ interopDefault(import("eslint-plugin-react-hooks")),
8
+ interopDefault(import("eslint-plugin-react-naming-convention")),
9
+ interopDefault(import("eslint-plugin-react-perf")),
10
+ interopDefault(import("eslint-plugin-react-web-api")),
11
+ interopDefault(import("eslint-plugin-react-x"))
12
+ ]);
13
+ let files = ["**/*.jsx"];
14
+ if (config.typescript) files.push("**/*.tsx");
15
+ return {
16
+ name: "azat-io/react/rules",
17
+ files,
18
+ plugins: {
19
+ "react-compiler": reactCompilerPlugin,
20
+ "react-dom": reactDomPlugin,
21
+ "react-hooks": reactHooksPlugin,
22
+ "react-naming-convention": reactNamingConventionPlugin,
23
+ "react-perf": reactPerfPlugin,
24
+ "react-web-api": reactWebApiPlugin,
25
+ "react-x": reactXPlugin
26
+ },
27
+ rules: {
28
+ "react-compiler/react-compiler": "error",
29
+ "react-dom/no-dangerously-set-innerhtml": "error",
30
+ "react-dom/no-dangerously-set-innerhtml-with-children": "error",
31
+ "react-dom/no-find-dom-node": "error",
32
+ "react-dom/no-flush-sync": "error",
33
+ "react-dom/no-hydrate": "error",
34
+ "react-dom/no-missing-button-type": "error",
35
+ "react-dom/no-missing-iframe-sandbox": "error",
36
+ "react-dom/no-namespace": "error",
37
+ "react-dom/no-render": "error",
38
+ "react-dom/no-render-return-value": "error",
39
+ "react-dom/no-script-url": "error",
40
+ "react-dom/no-unknown-property": "error",
41
+ "react-dom/no-unsafe-iframe-sandbox": "error",
42
+ "react-dom/no-unsafe-target-blank": "error",
43
+ "react-dom/no-use-form-state": "error",
44
+ "react-dom/no-void-elements-with-children": "error",
45
+ "react-hooks/exhaustive-deps": "error",
46
+ "react-hooks/rules-of-hooks": "error",
47
+ "react-naming-convention/context-name": "error",
48
+ "react-naming-convention/id-name": "error",
49
+ "react-naming-convention/use-state": "error",
50
+ "react-perf/jsx-no-jsx-as-prop": "error",
51
+ "react-perf/jsx-no-new-array-as-prop": "error",
52
+ "react-perf/jsx-no-new-function-as-prop": "error",
53
+ "react-perf/jsx-no-new-object-as-prop": "error",
54
+ "react-web-api/no-leaked-absolute-orientation-sensor": "error",
55
+ "react-web-api/no-leaked-ambient-light-sensor": "error",
56
+ "react-web-api/no-leaked-animation-frame": "error",
57
+ "react-web-api/no-leaked-broadcast-channel": "error",
58
+ "react-web-api/no-leaked-event-listener": "error",
59
+ "react-web-api/no-leaked-event-source": "error",
60
+ "react-web-api/no-leaked-geolocation": "error",
61
+ "react-web-api/no-leaked-gravity-sensor": "error",
62
+ "react-web-api/no-leaked-gyroscope": "error",
63
+ "react-web-api/no-leaked-idle-callback": "error",
64
+ "react-web-api/no-leaked-intersection-observer": "error",
65
+ "react-web-api/no-leaked-interval": "error",
66
+ "react-web-api/no-leaked-linear-acceleration-sensor": "error",
67
+ "react-web-api/no-leaked-magnetometer": "error",
68
+ "react-web-api/no-leaked-mutation-observer": "error",
69
+ "react-web-api/no-leaked-orientation-sensor": "error",
70
+ "react-web-api/no-leaked-performance-observer": "error",
71
+ "react-web-api/no-leaked-relative-accelerometer": "error",
72
+ "react-web-api/no-leaked-resize-observer": "error",
73
+ "react-web-api/no-leaked-timeout": "error",
74
+ "react-web-api/no-leaked-websocket": "error",
75
+ "react-x/jsx-key-before-spread": "error",
76
+ "react-x/jsx-shorthand-boolean": "error",
77
+ "react-x/jsx-shorthand-fragment": "error",
78
+ "react-x/no-access-state-in-setstate": "error",
79
+ "react-x/no-array-index-key": "error",
80
+ "react-x/no-class-component": "error",
81
+ "react-x/no-complex-conditional-rendering": "error",
82
+ "react-x/no-component-will-mount": "error",
83
+ "react-x/no-component-will-receive-props": "error",
84
+ "react-x/no-component-will-update": "error",
85
+ "react-x/no-duplicate-key": "error",
86
+ "react-x/no-nested-component-definitions": "error",
87
+ "react-x/no-unnecessary-use-callback": "error",
88
+ "react-x/no-unnecessary-use-memo": "error",
89
+ "react-x/no-unnecessary-use-prefix": "error",
90
+ "react-x/no-unsafe-component-will-update": "error",
91
+ "react-x/no-unstable-context-value": "error",
92
+ "react-x/no-unused-props": "error",
93
+ "react-x/no-unused-state": "error",
94
+ "react-x/no-use-context": "error",
95
+ "react-x/no-useless-fragment": "error",
96
+ "react-x/prefer-namespace-import": "error",
97
+ "react-x/set-state-in-effect": "error"
98
+ },
99
+ settings: { react: {
100
+ fragment: "Fragment",
101
+ pragma: "React",
102
+ version: "detect"
103
+ } }
104
+ };
130
105
  }
131
- export {
132
- react
133
- };
106
+ export { react };
@@ -1,91 +1,77 @@
1
1
  import { interopDefault } from "../utilities.js";
2
2
  async function svelte(config) {
3
- if (!config.svelte) {
4
- return {};
5
- }
6
- let files = ["**/*.svelte"];
7
- let [sveltePlugin, svelteParser] = await Promise.all([
8
- interopDefault(import("eslint-plugin-svelte")),
9
- interopDefault(import("svelte-eslint-parser"))
10
- ]);
11
- let additionalParserOptions = {};
12
- if (config.typescript) {
13
- let { parser: typescriptParser } = await interopDefault(
14
- import("typescript-eslint")
15
- );
16
- additionalParserOptions = {
17
- ...additionalParserOptions,
18
- parser: typescriptParser,
19
- projectService: true,
20
- tsconfigRootDir: process.cwd()
21
- };
22
- }
23
- return {
24
- name: "azat-io/svelte/rules",
25
- files,
26
- languageOptions: {
27
- parser: svelteParser,
28
- parserOptions: {
29
- ecmaVersion: "latest",
30
- extraFileExtensions: [".svelte"],
31
- sourceType: "module",
32
- ...additionalParserOptions
33
- }
34
- },
35
- plugins: {
36
- svelte: sveltePlugin
37
- },
38
- rules: {
39
- "svelte/block-lang": [
40
- "error",
41
- {
42
- enforceScriptPresent: true,
43
- enforceStylePresent: false,
44
- script: ["ts", null]
45
- }
46
- ],
47
- "svelte/button-has-type": "error",
48
- "svelte/comment-directive": "error",
49
- "svelte/derived-has-same-inputs-outputs": "error",
50
- "svelte/infinite-reactive-loop": "error",
51
- "svelte/no-add-event-listener": "error",
52
- "svelte/no-at-debug-tags": "error",
53
- "svelte/no-at-html-tags": "error",
54
- "svelte/no-dom-manipulating": "error",
55
- "svelte/no-dupe-else-if-blocks": "error",
56
- "svelte/no-dupe-on-directives": "error",
57
- "svelte/no-dupe-style-properties": "error",
58
- "svelte/no-dupe-use-directives": "error",
59
- "svelte/no-extra-reactive-curlies": "error",
60
- "svelte/no-ignored-unsubscribe": "error",
61
- "svelte/no-immutable-reactive-statements": "error",
62
- "svelte/no-inner-declarations": "error",
63
- "svelte/no-inspect": "error",
64
- "svelte/no-object-in-text-mustaches": "error",
65
- "svelte/no-reactive-functions": "error",
66
- "svelte/no-shorthand-style-property-overrides": "error",
67
- "svelte/no-svelte-internal": "error",
68
- "svelte/no-target-blank": "error",
69
- "svelte/no-top-level-browser-globals": "error",
70
- "svelte/no-unknown-style-directive-property": "error",
71
- "svelte/no-unused-svelte-ignore": "error",
72
- "svelte/no-useless-mustaches": "error",
73
- "svelte/prefer-class-directive": "error",
74
- "svelte/prefer-destructured-store-props": "error",
75
- "svelte/prefer-style-directive": "error",
76
- "svelte/prefer-svelte-reactivity": "error",
77
- "svelte/prefer-writable-derived": "error",
78
- "svelte/require-each-key": "error",
79
- "svelte/require-event-prefix": "error",
80
- "svelte/require-store-reactive-access": "error",
81
- "svelte/require-stores-init": "error",
82
- "svelte/shorthand-attribute": "error",
83
- "svelte/shorthand-directive": "error",
84
- "svelte/system": "error",
85
- "svelte/valid-each-key": "error"
86
- }
87
- };
3
+ if (!config.svelte) return {};
4
+ let files = ["**/*.svelte"];
5
+ let [sveltePlugin, svelteParser] = await Promise.all([interopDefault(import("eslint-plugin-svelte")), interopDefault(import("svelte-eslint-parser"))]);
6
+ let additionalParserOptions = {};
7
+ if (config.typescript) {
8
+ let { parser: typescriptParser } = await interopDefault(import("typescript-eslint"));
9
+ additionalParserOptions = {
10
+ ...additionalParserOptions,
11
+ parser: typescriptParser,
12
+ projectService: true,
13
+ tsconfigRootDir: process.cwd()
14
+ };
15
+ }
16
+ return {
17
+ name: "azat-io/svelte/rules",
18
+ files,
19
+ languageOptions: {
20
+ parser: svelteParser,
21
+ parserOptions: {
22
+ ecmaVersion: "latest",
23
+ extraFileExtensions: [".svelte"],
24
+ sourceType: "module",
25
+ ...additionalParserOptions
26
+ }
27
+ },
28
+ plugins: { svelte: sveltePlugin },
29
+ rules: {
30
+ "svelte/block-lang": ["error", {
31
+ enforceScriptPresent: true,
32
+ enforceStylePresent: false,
33
+ script: ["ts", null]
34
+ }],
35
+ "svelte/button-has-type": "error",
36
+ "svelte/comment-directive": "error",
37
+ "svelte/derived-has-same-inputs-outputs": "error",
38
+ "svelte/infinite-reactive-loop": "error",
39
+ "svelte/no-add-event-listener": "error",
40
+ "svelte/no-at-debug-tags": "error",
41
+ "svelte/no-at-html-tags": "error",
42
+ "svelte/no-dom-manipulating": "error",
43
+ "svelte/no-dupe-else-if-blocks": "error",
44
+ "svelte/no-dupe-on-directives": "error",
45
+ "svelte/no-dupe-style-properties": "error",
46
+ "svelte/no-dupe-use-directives": "error",
47
+ "svelte/no-extra-reactive-curlies": "error",
48
+ "svelte/no-ignored-unsubscribe": "error",
49
+ "svelte/no-immutable-reactive-statements": "error",
50
+ "svelte/no-inner-declarations": "error",
51
+ "svelte/no-inspect": "error",
52
+ "svelte/no-object-in-text-mustaches": "error",
53
+ "svelte/no-reactive-functions": "error",
54
+ "svelte/no-shorthand-style-property-overrides": "error",
55
+ "svelte/no-svelte-internal": "error",
56
+ "svelte/no-target-blank": "error",
57
+ "svelte/no-top-level-browser-globals": "error",
58
+ "svelte/no-unknown-style-directive-property": "error",
59
+ "svelte/no-unused-svelte-ignore": "error",
60
+ "svelte/no-useless-mustaches": "error",
61
+ "svelte/prefer-class-directive": "error",
62
+ "svelte/prefer-destructured-store-props": "error",
63
+ "svelte/prefer-style-directive": "error",
64
+ "svelte/prefer-svelte-reactivity": "error",
65
+ "svelte/prefer-writable-derived": "error",
66
+ "svelte/require-each-key": "error",
67
+ "svelte/require-event-prefix": "error",
68
+ "svelte/require-store-reactive-access": "error",
69
+ "svelte/require-stores-init": "error",
70
+ "svelte/shorthand-attribute": "error",
71
+ "svelte/shorthand-directive": "error",
72
+ "svelte/system": "error",
73
+ "svelte/valid-each-key": "error"
74
+ }
75
+ };
88
76
  }
89
- export {
90
- svelte
91
- };
77
+ export { svelte };