@10stars/config 13.2.1 → 13.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.
@@ -0,0 +1,11 @@
1
+ import type { ConfigArray } from "typescript-eslint"
2
+
3
+ import { onlyBrowserWithoutCommon } from "./eslint.config.browser"
4
+ import baseConfig from "./eslint.config.common"
5
+ import { onlyNodeWithoutCommon } from "./eslint.config.node"
6
+
7
+ export default [
8
+ ...baseConfig,
9
+ ...onlyBrowserWithoutCommon,
10
+ ...onlyNodeWithoutCommon,
11
+ ] satisfies ConfigArray
@@ -1,13 +1,108 @@
1
+ import reactHooks from "@10stars/eslint-plugin-react-hooks"
2
+ import eslintReact from "@eslint-react/eslint-plugin"
3
+ import type { Linter } from "eslint"
4
+ import reactPlugin from "eslint-plugin-react"
1
5
  import globals from "globals"
2
6
  import type { ConfigArray } from "typescript-eslint"
3
7
 
4
- import baseConfig from "./eslint.config"
8
+ import baseConfig from "./eslint.config.common"
5
9
 
6
- export default [
7
- ...baseConfig,
10
+ const addPluginReact = () =>
11
+ [
12
+ reactPlugin.configs.flat.recommended, // This is not a plugin object, but a shareable config object
13
+ reactPlugin.configs.flat["jsx-runtime"], // Add this if you are using React 17+
14
+ {
15
+ settings: {
16
+ react: {
17
+ version: "18",
18
+ },
19
+ },
20
+ rules: {
21
+ "react/display-name": 0,
22
+ "react/no-children-prop": 0,
23
+
24
+ "react/no-unknown-property": [
25
+ 2,
26
+ {
27
+ ignore: [`sx`],
28
+ },
29
+ ],
30
+
31
+ "react/prop-types": 0,
32
+ "react/react-in-jsx-scope": 0,
33
+
34
+ "react/jsx-filename-extension": [
35
+ 1,
36
+ {
37
+ extensions: [`.jsx`, `.tsx`],
38
+ },
39
+ ],
40
+
41
+ "react/no-invalid-html-attribute": 2,
42
+ "react/prefer-stateless-function": 2,
43
+ "react/jsx-boolean-value": [1, `never`],
44
+ "react/jsx-curly-brace-presence": [1, `always`],
45
+ "react/jsx-fragments": 1,
46
+ "react/jsx-no-bind": 1,
47
+ "react/jsx-no-constructed-context-values": 1,
48
+
49
+ "react/jsx-no-script-url": [
50
+ 2,
51
+ [
52
+ {
53
+ name: `Link`,
54
+ props: [`to`],
55
+ },
56
+ {
57
+ name: `NavLink`,
58
+ props: [`to`],
59
+ },
60
+ {
61
+ name: `a`,
62
+ props: [`href`, `to`],
63
+ },
64
+ ],
65
+ ],
66
+
67
+ "react/jsx-no-useless-fragment": 1,
68
+ "react/jsx-no-target-blank": 2,
69
+ "react/jsx-sort-props": 1,
70
+ },
71
+ },
72
+ ] satisfies Linter.Config[]
73
+
74
+ const addPluginReactExtra = () =>
75
+ [
76
+ eslintReact.configs["recommended-typescript"],
77
+ {
78
+ rules: {
79
+ "@eslint-react/dom/no-dangerously-set-innerhtml": 0, // we use for specific cases
80
+ },
81
+ },
82
+ ] satisfies Linter.Config[]
83
+
84
+ const addStorybookOverrides = () =>
85
+ ({
86
+ files: ["**/*stories.tsx"],
87
+ rules: {
88
+ "react/jsx-no-bind": 0, // allow inline functions
89
+ "@eslint-react/no-array-index-key": 0, // allow array index as key
90
+ },
91
+ }) satisfies Linter.Config
92
+
93
+ export const onlyBrowserWithoutCommon = [
8
94
  {
9
95
  languageOptions: {
10
96
  globals: globals.browser,
11
97
  },
12
98
  },
99
+ ...addPluginReact(),
100
+ ...addPluginReactExtra(),
101
+ reactHooks.configs.recommended,
102
+ addStorybookOverrides(),
103
+ ] satisfies ConfigArray
104
+
105
+ export default [
106
+ ...baseConfig,
107
+ ...onlyBrowserWithoutCommon,
13
108
  ] satisfies ConfigArray
@@ -1,14 +1,11 @@
1
1
  import { builtinModules } from "node:module"
2
2
 
3
3
  import eslint from "@eslint/js"
4
- import eslintReact from "@eslint-react/eslint-plugin"
5
4
  import stylistic from "@stylistic/eslint-plugin"
6
5
  import type { Linter } from "eslint"
7
6
  import eslintConfigPrettier from "eslint-config-prettier"
8
7
  import importPlugin from "eslint-plugin-import"
9
8
  import noRelativeImportPaths from "eslint-plugin-no-relative-import-paths"
10
- import reactPlugin from "eslint-plugin-react"
11
- import reactHooksConfigurable from "eslint-plugin-react-hooks-configurable"
12
9
  import * as regexpPlugin from "eslint-plugin-regexp"
13
10
  import simpleImportSort from "eslint-plugin-simple-import-sort"
14
11
  import tseslint from "typescript-eslint"
@@ -37,88 +34,6 @@ const addPluginNoRelativeImportPaths = () =>
37
34
  },
38
35
  }) satisfies Linter.Config
39
36
 
40
- const addPluginReact = () =>
41
- [
42
- reactPlugin.configs.flat.recommended, // This is not a plugin object, but a shareable config object
43
- reactPlugin.configs.flat["jsx-runtime"], // Add this if you are using React 17+
44
- {
45
- settings: {
46
- react: {
47
- version: "18",
48
- },
49
- },
50
- rules: {
51
- "react/display-name": 0,
52
- "react/no-children-prop": 0,
53
-
54
- "react/no-unknown-property": [
55
- 2,
56
- {
57
- ignore: [`sx`],
58
- },
59
- ],
60
-
61
- "react/prop-types": 0,
62
- "react/react-in-jsx-scope": 0,
63
-
64
- "react/jsx-filename-extension": [
65
- 1,
66
- {
67
- extensions: [`.jsx`, `.tsx`],
68
- },
69
- ],
70
-
71
- "react/no-invalid-html-attribute": 2,
72
- "react/prefer-stateless-function": 2,
73
- "react/jsx-boolean-value": [1, `never`],
74
- "react/jsx-curly-brace-presence": [1, `always`],
75
- "react/jsx-fragments": 1,
76
- "react/jsx-no-bind": 1,
77
- "react/jsx-no-constructed-context-values": 1,
78
-
79
- "react/jsx-no-script-url": [
80
- 2,
81
- [
82
- {
83
- name: `Link`,
84
- props: [`to`],
85
- },
86
- {
87
- name: `NavLink`,
88
- props: [`to`],
89
- },
90
- {
91
- name: `a`,
92
- props: [`href`, `to`],
93
- },
94
- ],
95
- ],
96
-
97
- "react/jsx-no-useless-fragment": 1,
98
- "react/jsx-no-target-blank": 2,
99
- "react/jsx-sort-props": 1,
100
- },
101
- },
102
- ] satisfies Linter.Config[]
103
-
104
- const addPluginReactHooksConfigurable = () =>
105
- ({
106
- plugins: { "react-hooks-configurable": reactHooksConfigurable },
107
- rules: {
108
- "react-hooks-configurable/rules-of-hooks": 2,
109
- },
110
- }) satisfies Linter.Config
111
-
112
- const addPluginReactExtra = () =>
113
- [
114
- eslintReact.configs["recommended-typescript"],
115
- {
116
- rules: {
117
- "@eslint-react/dom/no-dangerously-set-innerhtml": 0, // we use for specific cases
118
- },
119
- },
120
- ] satisfies Linter.Config[]
121
-
122
37
  const addPluginImport = () =>
123
38
  [
124
39
  importPlugin.flatConfigs.recommended,
@@ -175,9 +90,6 @@ export default tseslint.config(
175
90
  tseslint.configs.stylisticTypeChecked,
176
91
  ...addPluginRegexp(),
177
92
  addPluginNoRelativeImportPaths(),
178
- ...addPluginReact(),
179
- ...addPluginReactExtra(),
180
- addPluginReactHooksConfigurable(),
181
93
  ...addPluginImport(),
182
94
  addPluginSimpleImportSort(),
183
95
  addPluginStylistic(),
@@ -1,13 +1,17 @@
1
1
  import globals from "globals"
2
2
  import type { ConfigArray } from "typescript-eslint"
3
3
 
4
- import baseConfig from "./eslint.config"
4
+ import baseConfig from "./eslint.config.common"
5
5
 
6
- export default [
7
- ...baseConfig,
6
+ export const onlyNodeWithoutCommon = [
8
7
  {
9
8
  languageOptions: {
10
9
  globals: globals.node,
11
10
  },
12
11
  },
13
12
  ] satisfies ConfigArray
13
+
14
+ export default [
15
+ ...baseConfig,
16
+ ...onlyNodeWithoutCommon, //
17
+ ] satisfies ConfigArray
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "name": "@10stars/config",
7
- "version": "13.2.1",
7
+ "version": "13.3.0",
8
8
  "author": "10stars.dev <web@alexandrov.co> (https://alexandrov.co)",
9
9
  "license": "MIT",
10
10
  "bin": {
@@ -12,7 +12,8 @@
12
12
  },
13
13
  "files": [
14
14
  "src",
15
- "eslint.config.ts",
15
+ "eslint.config.all.ts",
16
+ "eslint.config.common.ts",
16
17
  "eslint.config.browser.ts",
17
18
  "eslint.config.node.ts",
18
19
  ".prettierrc.js",
@@ -23,10 +24,11 @@
23
24
  "tsx": "newer tsx breaks ladle"
24
25
  },
25
26
  "dependencies": {
27
+ "@10stars/eslint-plugin-react-hooks": "^5.1.0",
26
28
  "@commitlint/cli": "^19.0.0",
27
29
  "@commitlint/config-conventional": "^19.0.0",
28
30
  "@eslint/js": "^9.0.0",
29
- "@eslint-react/eslint-plugin": "^1.30.0",
31
+ "@eslint-react/eslint-plugin": "^1.0.0",
30
32
  "@stylistic/eslint-plugin": "^4.0.0",
31
33
  "@types/lodash": "^4.0.0",
32
34
  "@types/node": "^22.0.0",
@@ -37,7 +39,6 @@
37
39
  "eslint-plugin-import": "^2.0.0",
38
40
  "eslint-plugin-no-relative-import-paths": "^1.5.4",
39
41
  "eslint-plugin-react": "^7.0.0",
40
- "eslint-plugin-react-hooks-configurable": "5.1.0",
41
42
  "eslint-plugin-regexp": "^2.0.0",
42
43
  "eslint-plugin-simple-import-sort": "^12.0.0",
43
44
  "globals": "^16.0.0",