diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f58e6a14b..e6f3224789 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## v1.52.9 (2025-08-31) + +### 🐞 Fixes + +- fix: issue introduced in version [v1.52.7](https://github.com/Rel1cx/eslint-react/releases/tag/v1.52.7) where the `react-hooks-extra` rules were not exported, closes #1207 by @Rel1cx in https://github.com/Rel1cx/eslint-react/pull/1208 + +**Full Changelog**: https://github.com/Rel1cx/eslint-react/compare/v1.52.8...v1.52.9 + ## v1.52.8 (2025-08-29) ### 🐞 Fixes diff --git a/apps/website/content/docs/changelog.md b/apps/website/content/docs/changelog.md index d326781625..962b338868 100644 --- a/apps/website/content/docs/changelog.md +++ b/apps/website/content/docs/changelog.md @@ -2,6 +2,14 @@ title: Changelog --- +## v1.52.9 (2025-08-31) + +### 🐞 Fixes + +- fix: issue introduced in version [v1.52.7](https://github.com/Rel1cx/eslint-react/releases/tag/v1.52.7) where the `react-hooks-extra` rules were not exported, closes #1207 by @Rel1cx in https://github.com/Rel1cx/eslint-react/pull/1208 + +**Full Changelog**: https://github.com/Rel1cx/eslint-react/compare/v1.52.8...v1.52.9 + ## v1.52.8 (2025-08-29) ### 🐞 Fixes diff --git a/examples/react-dom/eslint.config.js b/examples/react-dom/eslint.config.js index bbbcdced1c..a5a33f9d66 100644 --- a/examples/react-dom/eslint.config.js +++ b/examples/react-dom/eslint.config.js @@ -1,3 +1,5 @@ +// @ts-check + import eslintReact from "@eslint-react/eslint-plugin"; import eslintJs from "@eslint/js"; import eslintPluginReactHooks from "eslint-plugin-react-hooks"; diff --git a/packages/plugins/eslint-plugin-react-debug/src/configs/all.ts b/packages/plugins/eslint-plugin-react-debug/src/configs/all.ts index 8595ec67f0..9067ce8dd4 100644 --- a/packages/plugins/eslint-plugin-react-debug/src/configs/all.ts +++ b/packages/plugins/eslint-plugin-react-debug/src/configs/all.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; export const name = "react-debug/all"; @@ -9,7 +9,7 @@ export const rules = { "react-debug/hook": "warn", "react-debug/is-from-react": "warn", "react-debug/jsx": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const settings = { "react-x": DEFAULT_ESLINT_REACT_SETTINGS, diff --git a/packages/plugins/eslint-plugin-react-debug/src/index.ts b/packages/plugins/eslint-plugin-react-debug/src/index.ts index cb8d8e4895..f5ab58e393 100644 --- a/packages/plugins/eslint-plugin-react-debug/src/index.ts +++ b/packages/plugins/eslint-plugin-react-debug/src/index.ts @@ -1,5 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; -import type { CompatibleConfig } from "@eslint-react/shared"; +import type { CompatibleConfig } from "@eslint-react/kit"; import * as allConfig from "./configs/all"; import { plugin } from "./plugin"; @@ -13,7 +12,7 @@ function toFlatConfig(config: CompatibleConfig) { }; } -function toLegacyConfig({ rules }: { rules: RulePreset }) { +function toLegacyConfig({ rules }: CompatibleConfig) { return { plugins: ["react-debug"], rules, diff --git a/packages/plugins/eslint-plugin-react-debug/src/plugin.ts b/packages/plugins/eslint-plugin-react-debug/src/plugin.ts index ed5c5db58c..1e39fb8638 100644 --- a/packages/plugins/eslint-plugin-react-debug/src/plugin.ts +++ b/packages/plugins/eslint-plugin-react-debug/src/plugin.ts @@ -1,4 +1,4 @@ -import type { CompatiblePlugin } from "@eslint-react/shared"; +import type { CompatiblePlugin } from "@eslint-react/kit"; import { name, version } from "../package.json"; diff --git a/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts index d21af18bea..52f8b65a69 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; export const name = "react-dom/recommended"; @@ -20,7 +20,7 @@ export const rules = { "react-dom/no-unsafe-target-blank": "warn", "react-dom/no-use-form-state": "error", "react-dom/no-void-elements-with-children": "error", -} as const satisfies RulePreset; +} as const satisfies Record; export const settings = { "react-x": DEFAULT_ESLINT_REACT_SETTINGS, diff --git a/packages/plugins/eslint-plugin-react-dom/src/index.ts b/packages/plugins/eslint-plugin-react-dom/src/index.ts index 16eb55842b..0e22cccec3 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/index.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/index.ts @@ -1,5 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; -import type { CompatibleConfig } from "@eslint-react/shared"; +import type { CompatibleConfig } from "@eslint-react/kit"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; @@ -13,7 +12,7 @@ function toFlatConfig(config: CompatibleConfig) { }; } -function toLegacyConfig({ rules }: { rules: RulePreset }) { +function toLegacyConfig({ rules }: CompatibleConfig) { return { plugins: ["react-dom"], rules, diff --git a/packages/plugins/eslint-plugin-react-dom/src/plugin.ts b/packages/plugins/eslint-plugin-react-dom/src/plugin.ts index 0171d176b0..2d05322308 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/plugin.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/plugin.ts @@ -1,4 +1,4 @@ -import type { CompatiblePlugin } from "@eslint-react/shared"; +import type { CompatiblePlugin } from "@eslint-react/kit"; import { name, version } from "../package.json"; diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts index 02623b7ead..d591986532 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts @@ -1,7 +1,7 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; export const name = "react-hooks-extra/recommended"; export const rules = { "react-hooks-extra/no-direct-set-state-in-use-effect": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/index.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/index.ts index c0b5985e8a..1bddb4f056 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/index.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/index.ts @@ -1,5 +1,5 @@ -import type { RulePreset } from "@eslint-react/kit"; -import type { CompatibleConfig } from "@eslint-react/shared"; +import type { RuleConfig } from "@eslint-react/kit"; +import type { CompatibleConfig } from "@eslint-react/kit"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; @@ -13,7 +13,7 @@ function toFlatConfig(config: CompatibleConfig) { }; } -function toLegacyConfig({ rules }: { rules: RulePreset }) { +function toLegacyConfig({ rules }: CompatibleConfig) { return { plugins: ["react-hooks-extra"], rules, diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts index 80a1e3eda0..a505396851 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts @@ -1,4 +1,4 @@ -import type { CompatiblePlugin } from "@eslint-react/shared"; +import type { CompatiblePlugin } from "@eslint-react/kit"; import { name, version } from "../package.json"; diff --git a/packages/plugins/eslint-plugin-react-naming-convention/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-naming-convention/src/configs/recommended.ts index e62065a87b..86de6e029c 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-naming-convention/src/configs/recommended.ts @@ -1,8 +1,8 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; export const name = "react-naming-convention/recommended"; export const rules = { "react-naming-convention/context-name": "warn", // "react-naming-convention/use-state": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; diff --git a/packages/plugins/eslint-plugin-react-naming-convention/src/index.ts b/packages/plugins/eslint-plugin-react-naming-convention/src/index.ts index f2d2997f2e..5147f0f0b5 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/src/index.ts +++ b/packages/plugins/eslint-plugin-react-naming-convention/src/index.ts @@ -1,5 +1,5 @@ -import type { RulePreset } from "@eslint-react/kit"; -import type { CompatibleConfig } from "@eslint-react/shared"; +import type { RuleConfig } from "@eslint-react/kit"; +import type { CompatibleConfig } from "@eslint-react/kit"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; @@ -13,7 +13,7 @@ function toFlatConfig(config: CompatibleConfig) { }; } -function toLegacyConfig({ rules }: { rules: RulePreset }) { +function toLegacyConfig({ rules }: CompatibleConfig) { return { plugins: ["react-naming-convention"], rules, diff --git a/packages/plugins/eslint-plugin-react-naming-convention/src/plugin.ts b/packages/plugins/eslint-plugin-react-naming-convention/src/plugin.ts index 90783b842d..7bb00cfba6 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/src/plugin.ts +++ b/packages/plugins/eslint-plugin-react-naming-convention/src/plugin.ts @@ -1,4 +1,4 @@ -import type { CompatiblePlugin } from "@eslint-react/shared"; +import type { CompatiblePlugin } from "@eslint-react/kit"; import { name, version } from "../package.json"; diff --git a/packages/plugins/eslint-plugin-react-web-api/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-web-api/src/configs/recommended.ts index 4af03019e7..d77d872f43 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/configs/recommended.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; export const name = "react-web-api/recommended"; @@ -8,7 +8,7 @@ export const rules = { "react-web-api/no-leaked-interval": "warn", "react-web-api/no-leaked-resize-observer": "warn", "react-web-api/no-leaked-timeout": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const settings = { "react-x": DEFAULT_ESLINT_REACT_SETTINGS, diff --git a/packages/plugins/eslint-plugin-react-web-api/src/index.ts b/packages/plugins/eslint-plugin-react-web-api/src/index.ts index b33ba47e2f..6c8645bbd4 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/index.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/index.ts @@ -1,5 +1,5 @@ -import type { RulePreset } from "@eslint-react/kit"; -import type { CompatibleConfig } from "@eslint-react/shared"; +import type { RuleConfig } from "@eslint-react/kit"; +import type { CompatibleConfig } from "@eslint-react/kit"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; @@ -13,7 +13,7 @@ function toFlatConfig(config: CompatibleConfig) { }; } -function toLegacyConfig({ rules }: { rules: RulePreset }) { +function toLegacyConfig({ rules }: CompatibleConfig) { return { plugins: ["react-web-api"], rules, diff --git a/packages/plugins/eslint-plugin-react-web-api/src/plugin.ts b/packages/plugins/eslint-plugin-react-web-api/src/plugin.ts index e6ac500448..0d064c931d 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/plugin.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/plugin.ts @@ -1,4 +1,4 @@ -import type { CompatiblePlugin } from "@eslint-react/shared"; +import type { CompatiblePlugin } from "@eslint-react/kit"; import { name, version } from "../package.json"; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts index fb2caef331..b3b5dc193c 100644 --- a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts +++ b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import * as recommendedTypeScript from "./recommended-typescript"; @@ -8,7 +8,7 @@ export const rules = { ...recommendedTypeScript.rules, "react-x/no-leaked-conditional-rendering": "warn", "react-x/no-unused-props": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const settings = { ...recommendedTypeScript.settings, diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts index 1ef3916d21..7b1be297bd 100644 --- a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts +++ b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import * as recommended from "./recommended"; @@ -10,7 +10,7 @@ export const rules = { "react-x/jsx-no-undef": "off", "react-x/jsx-uses-react": "off", "react-x/jsx-uses-vars": "off", -} as const satisfies RulePreset; +} as const satisfies Record; export const settings = { ...recommended.settings, diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts index 2e7912f163..9974de5db2 100644 --- a/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; export const name = "react-x/recommended"; @@ -47,7 +47,7 @@ export const rules = { "react-x/no-use-context": "warn", "react-x/no-useless-forward-ref": "warn", "react-x/prefer-use-state-lazy-initialization": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const settings = { "react-x": DEFAULT_ESLINT_REACT_SETTINGS, diff --git a/packages/plugins/eslint-plugin-react-x/src/index.ts b/packages/plugins/eslint-plugin-react-x/src/index.ts index 30860c3147..7ffc4268ac 100644 --- a/packages/plugins/eslint-plugin-react-x/src/index.ts +++ b/packages/plugins/eslint-plugin-react-x/src/index.ts @@ -1,5 +1,5 @@ -import type { RulePreset } from "@eslint-react/kit"; -import type { CompatibleConfig } from "@eslint-react/shared"; +import type { RuleConfig } from "@eslint-react/kit"; +import type { CompatibleConfig } from "@eslint-react/kit"; import * as recommendedConfig from "./configs/recommended"; import * as recommendedTypeCheckedConfig from "./configs/recommended-type-checked"; @@ -15,7 +15,7 @@ function toFlatConfig(config: CompatibleConfig) { }; } -function toLegacyConfig({ rules }: { rules: RulePreset }) { +function toLegacyConfig({ rules }: CompatibleConfig) { return { plugins: ["react-x"], rules, diff --git a/packages/plugins/eslint-plugin-react-x/src/plugin.ts b/packages/plugins/eslint-plugin-react-x/src/plugin.ts index a2688493a4..8d45ac4e50 100644 --- a/packages/plugins/eslint-plugin-react-x/src/plugin.ts +++ b/packages/plugins/eslint-plugin-react-x/src/plugin.ts @@ -1,4 +1,4 @@ -import type { CompatiblePlugin } from "@eslint-react/shared"; +import type { CompatiblePlugin } from "@eslint-react/kit"; import { name, version } from "../package.json"; diff --git a/packages/plugins/eslint-plugin/README.md b/packages/plugins/eslint-plugin/README.md index 27065390db..2861d79ad5 100644 --- a/packages/plugins/eslint-plugin/README.md +++ b/packages/plugins/eslint-plugin/README.md @@ -165,8 +165,8 @@ export default tseslint.config({ Contributions are welcome! -Please follow our [contributing guidelines](https://github.com/Rel1cx/eslint-react/tree/2.0.0/.github/CONTRIBUTING.md). +Please follow our [contributing guidelines](https://github.com/Rel1cx/eslint-react/tree/feature/refine-plugin-configuration-types/.github/CONTRIBUTING.md). ## License -This project is licensed under the MIT License - see the [LICENSE](https://github.com/Rel1cx/eslint-react/tree/2.0.0/LICENSE) file for details. +This project is licensed under the MIT License - see the [LICENSE](https://github.com/Rel1cx/eslint-react/tree/feature/refine-plugin-configuration-types/LICENSE) file for details. diff --git a/packages/plugins/eslint-plugin/src/configs/all.ts b/packages/plugins/eslint-plugin/src/configs/all.ts index f5acba1fbb..9763ea182a 100644 --- a/packages/plugins/eslint-plugin/src/configs/all.ts +++ b/packages/plugins/eslint-plugin/src/configs/all.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import reactDebug from "eslint-plugin-react-debug"; import reactHooksExtra from "eslint-plugin-react-hooks-extra"; import reactNamingConvention from "eslint-plugin-react-naming-convention"; @@ -104,7 +104,7 @@ export const rules = { "@eslint-react/naming-convention/filename": "warn", "@eslint-react/naming-convention/filename-extension": "warn", "@eslint-react/naming-convention/use-state": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const plugins = { ...x.plugins, diff --git a/packages/plugins/eslint-plugin/src/configs/debug.ts b/packages/plugins/eslint-plugin/src/configs/debug.ts index 5368db7f38..57d3b5daed 100644 --- a/packages/plugins/eslint-plugin/src/configs/debug.ts +++ b/packages/plugins/eslint-plugin/src/configs/debug.ts @@ -1,3 +1,5 @@ +import type { RuleConfig } from "@eslint-react/kit"; + import reactDebug from "eslint-plugin-react-debug"; export const name = "@eslint-react/debug"; @@ -8,7 +10,7 @@ export const rules = { "@eslint-react/debug/hook": "warn", "@eslint-react/debug/is-from-react": "warn", "@eslint-react/debug/jsx": "warn", -} as const; +} as const satisfies Record; export const plugins = { "@eslint-react/debug": reactDebug, diff --git a/packages/plugins/eslint-plugin/src/configs/disable-conflict-eslint-plugin-react.ts b/packages/plugins/eslint-plugin/src/configs/disable-conflict-eslint-plugin-react.ts index 9de216d588..3ffa9b3c05 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-conflict-eslint-plugin-react.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-conflict-eslint-plugin-react.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; // This rulelist should be kept in sync with `apps/website/content/docs/migration.mdx` // Rules provided by `eslint-plugin-react` that exist in this plugin. @@ -54,6 +54,6 @@ const conflictingRules = [ export const name = "@eslint-react/disable-conflict-eslint-plugin-react"; -export const rules: RulePreset = Object.fromEntries( +export const rules: Record = Object.fromEntries( conflictingRules.map((key) => [key, "off"] as const), ); diff --git a/packages/plugins/eslint-plugin/src/configs/disable-debug.ts b/packages/plugins/eslint-plugin/src/configs/disable-debug.ts index 2cb1eb5202..153eee79a2 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-debug.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-debug.ts @@ -1,7 +1,9 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { rules as debugRules } from "./debug"; export const name = "@eslint-react/disable-debug"; -export const rules: RulePreset = Object.fromEntries(Object.entries(debugRules).map(([rule]) => [rule, "off"])); +export const rules: Record = Object.fromEntries( + Object.entries(debugRules).map(([rule]) => [rule, "off"]), +); diff --git a/packages/plugins/eslint-plugin/src/configs/disable-dom.ts b/packages/plugins/eslint-plugin/src/configs/disable-dom.ts index 5897c7d377..d2036662b1 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-dom.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-dom.ts @@ -1,7 +1,9 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { rules as domRules } from "./dom"; export const name = "@eslint-react/disable-dom"; -export const rules: RulePreset = Object.fromEntries(Object.entries(domRules).map(([key]) => [key, "off"] as const)); +export const rules: Record = Object.fromEntries( + Object.entries(domRules).map(([key]) => [key, "off"] as const), +); diff --git a/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts b/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts index e4acfd4d7b..e65dad965f 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts @@ -1,8 +1,8 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; export const name = "@eslint-react/disable-type-checked"; -export const rules: RulePreset = { +export const rules: Record = { "@eslint-react/no-leaked-conditional-rendering": "off", "@eslint-react/no-unused-props": "off", "@eslint-react/prefer-read-only-props": "off", diff --git a/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts b/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts index d4b8e08eac..0ae2127a7e 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts @@ -1,7 +1,9 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { rules as webApiRules } from "./web-api"; export const name = "@eslint-react/disable-web-api"; -export const rules: RulePreset = Object.fromEntries(Object.entries(webApiRules).map(([key]) => [key, "off"] as const)); +export const rules: Record = Object.fromEntries( + Object.entries(webApiRules).map(([key]) => [key, "off"] as const), +); diff --git a/packages/plugins/eslint-plugin/src/configs/dom.ts b/packages/plugins/eslint-plugin/src/configs/dom.ts index 9ae4c201b6..7dd0442767 100644 --- a/packages/plugins/eslint-plugin/src/configs/dom.ts +++ b/packages/plugins/eslint-plugin/src/configs/dom.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; import reactDom from "eslint-plugin-react-dom"; @@ -20,7 +20,7 @@ export const rules = { "@eslint-react/dom/no-unsafe-target-blank": "warn", "@eslint-react/dom/no-use-form-state": "error", "@eslint-react/dom/no-void-elements-with-children": "error", -} as const satisfies RulePreset; +} as const satisfies Record; export const plugins = { "@eslint-react/dom": reactDom, diff --git a/packages/plugins/eslint-plugin/src/configs/off.ts b/packages/plugins/eslint-plugin/src/configs/off.ts index a4434d19ed..35204ad408 100644 --- a/packages/plugins/eslint-plugin/src/configs/off.ts +++ b/packages/plugins/eslint-plugin/src/configs/off.ts @@ -1,11 +1,11 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { rules as allRules } from "./all"; import { rules as disableTypeCheckedRules } from "./disable-type-checked"; export const name = "@eslint-react/off"; -export const rules: RulePreset = { +export const rules: Record = { ...Object.fromEntries(Object.entries(allRules).map(([key]) => [key, "off"] as const)), ...disableTypeCheckedRules, }; diff --git a/packages/plugins/eslint-plugin/src/configs/recommended-type-checked.ts b/packages/plugins/eslint-plugin/src/configs/recommended-type-checked.ts index cbd0d99224..02428ee022 100644 --- a/packages/plugins/eslint-plugin/src/configs/recommended-type-checked.ts +++ b/packages/plugins/eslint-plugin/src/configs/recommended-type-checked.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import * as recommendedTypeScript from "./recommended-typescript"; @@ -9,7 +9,7 @@ export const rules = { "@eslint-react/no-leaked-conditional-rendering": "warn", "@eslint-react/no-unused-props": "warn", // "@eslint-react/prefer-read-only-props": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const plugins = { ...recommendedTypeScript.plugins, diff --git a/packages/plugins/eslint-plugin/src/configs/recommended-typescript.ts b/packages/plugins/eslint-plugin/src/configs/recommended-typescript.ts index 5ea43dc5f9..ce441c91f1 100644 --- a/packages/plugins/eslint-plugin/src/configs/recommended-typescript.ts +++ b/packages/plugins/eslint-plugin/src/configs/recommended-typescript.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import * as recommended from "./recommended"; @@ -11,7 +11,7 @@ export const rules = { "@eslint-react/jsx-no-duplicate-props": "off", "@eslint-react/jsx-uses-react": "off", "@eslint-react/jsx-uses-vars": "off", -} as const satisfies RulePreset; +} as const satisfies Record; export const plugins = { ...recommended.plugins, diff --git a/packages/plugins/eslint-plugin/src/configs/recommended.ts b/packages/plugins/eslint-plugin/src/configs/recommended.ts index 7d1e64b879..9b8964e471 100644 --- a/packages/plugins/eslint-plugin/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin/src/configs/recommended.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import reactDebug from "eslint-plugin-react-debug"; import reactHooksExtra from "eslint-plugin-react-hooks-extra"; import reactNamingConvention from "eslint-plugin-react-naming-convention"; @@ -16,7 +16,7 @@ export const rules = { "@eslint-react/naming-convention/context-name": "warn", // "@eslint-react/naming-convention/use-state": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const plugins = { ...x.plugins, diff --git a/packages/plugins/eslint-plugin/src/configs/web-api.ts b/packages/plugins/eslint-plugin/src/configs/web-api.ts index f983c038b9..802bd8bfa5 100644 --- a/packages/plugins/eslint-plugin/src/configs/web-api.ts +++ b/packages/plugins/eslint-plugin/src/configs/web-api.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import reactWebApi from "eslint-plugin-react-web-api"; import * as dom from "./dom"; @@ -10,7 +10,7 @@ export const rules = { "@eslint-react/web-api/no-leaked-interval": "warn", "@eslint-react/web-api/no-leaked-resize-observer": "warn", "@eslint-react/web-api/no-leaked-timeout": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const plugins = { "@eslint-react/web-api": reactWebApi, diff --git a/packages/plugins/eslint-plugin/src/configs/x.ts b/packages/plugins/eslint-plugin/src/configs/x.ts index 46b95f688f..244a980c89 100644 --- a/packages/plugins/eslint-plugin/src/configs/x.ts +++ b/packages/plugins/eslint-plugin/src/configs/x.ts @@ -1,4 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; +import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; import react from "eslint-plugin-react-x"; @@ -66,7 +66,7 @@ export const rules = { // "@eslint-react/prefer-namespace-import": "warn", // "@eslint-react/prefer-read-only-props": "error", "@eslint-react/prefer-use-state-lazy-initialization": "warn", -} as const satisfies RulePreset; +} as const satisfies Record; export const plugins = { "@eslint-react": react, diff --git a/packages/plugins/eslint-plugin/src/index.ts b/packages/plugins/eslint-plugin/src/index.ts index 957a60fbf1..cf3e31d02e 100644 --- a/packages/plugins/eslint-plugin/src/index.ts +++ b/packages/plugins/eslint-plugin/src/index.ts @@ -1,5 +1,4 @@ -import type { RulePreset } from "@eslint-react/kit"; -import type { CompatiblePlugin } from "@eslint-react/shared"; +import type { CompatibleConfig, CompatiblePlugin } from "@eslint-react/kit"; import reactDebug from "eslint-plugin-react-debug"; import reactDom from "eslint-plugin-react-dom"; import reactHooksExtra from "eslint-plugin-react-hooks-extra"; @@ -23,7 +22,7 @@ import * as recommendedTypeScriptConfig from "./configs/recommended-typescript"; import * as xConfig from "./configs/x"; import { padKeysLeft } from "./utils"; -function toLegacyConfig({ rules }: { rules: RulePreset }) { +function toLegacyConfig({ rules }: CompatibleConfig) { return { plugins: ["@eslint-react"], rules, diff --git a/packages/shared/docs/README.md b/packages/shared/docs/README.md index f7de76ec21..98b144f86c 100644 --- a/packages/shared/docs/README.md +++ b/packages/shared/docs/README.md @@ -6,8 +6,6 @@ ## Interfaces -- [CompatibleConfig](interfaces/CompatibleConfig.md) -- [CompatiblePlugin](interfaces/CompatiblePlugin.md) - [CustomComponentNormalized](interfaces/CustomComponentNormalized.md) - [CustomComponentPropNormalized](interfaces/CustomComponentPropNormalized.md) - [ESLintReactSettingsNormalized](interfaces/ESLintReactSettingsNormalized.md) diff --git a/packages/shared/docs/interfaces/CompatibleConfig.md b/packages/shared/docs/interfaces/CompatibleConfig.md deleted file mode 100644 index 3dc0ee966e..0000000000 --- a/packages/shared/docs/interfaces/CompatibleConfig.md +++ /dev/null @@ -1,19 +0,0 @@ -[**@eslint-react/shared**](../README.md) - -*** - -[@eslint-react/shared](../README.md) / CompatibleConfig - -# Interface: CompatibleConfig - -## Properties - -### name? - -> `optional` **name**: `string` - -*** - -### rules? - -> `optional` **rules**: [`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)\<`string`, `any`\> diff --git a/packages/shared/docs/interfaces/CompatiblePlugin.md b/packages/shared/docs/interfaces/CompatiblePlugin.md deleted file mode 100644 index ffe28f37f0..0000000000 --- a/packages/shared/docs/interfaces/CompatiblePlugin.md +++ /dev/null @@ -1,27 +0,0 @@ -[**@eslint-react/shared**](../README.md) - -*** - -[@eslint-react/shared](../README.md) / CompatiblePlugin - -# Interface: CompatiblePlugin - -## Properties - -### meta - -> **meta**: `object` - -#### name - -> **name**: `string` - -#### version - -> **version**: `string` - -*** - -### rules - -> **rules**: [`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)\<`string`, `any`\> diff --git a/packages/shared/src/compatibility-types.ts b/packages/shared/src/compatibility-types.ts deleted file mode 100644 index 35fb5810a7..0000000000 --- a/packages/shared/src/compatibility-types.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * This file contains types that are intentionally wide/inaccurate, that exist - * for the purpose of satisfying both `defineConfig()` and `tseslint.config()`. - * See https://github.com/typescript-eslint/typescript-eslint/issues/10899 - * See https://github.com/typescript-eslint/typescript-eslint/blob/3a65920088a37d5a28ebb6f36fb82b7a091d3cb1/packages/typescript-eslint/src/compatibility-types.ts - */ - -export interface CompatiblePlugin { - meta: { - name: string; - version: string; - }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - rules: Record; -} - -export interface CompatibleConfig { - name?: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - rules?: Record; -} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 4e78931b44..b9d6c5312f 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,6 +1,5 @@ export * from "./_id"; export * from "./_require"; -export type * from "./compatibility-types"; export * from "./constants"; export * from "./get-doc-url"; export * from "./get-react-version"; diff --git a/packages/utilities/kit/src/types.ts b/packages/utilities/kit/src/types.ts index a5c584edad..3b99a5a680 100644 --- a/packages/utilities/kit/src/types.ts +++ b/packages/utilities/kit/src/types.ts @@ -4,20 +4,28 @@ import type * as tseslint from "@typescript-eslint/utils/ts-eslint"; * Rule severity. * @since 0.0.1 */ -export type RuleSeverity = "error" | "off" | "warn"; +export type SeverityName = "off" | "warn" | "error"; /** - * Rule declaration. - * @internal - * @since 0.0.1 + * The numeric severity level for a rule. + * + * - `0` means off. + * - `1` means warn. + * - `2` means error. + */ +export type SeverityLevel = 0 | 1 | 2; + +/** + * The severity of a rule in a configuration. */ -export type RuleDeclaration = [RuleSeverity, Record?] | RuleSeverity; +export type Severity = SeverityName | SeverityLevel; /** - * Rule config preset. + * Rule declaration. + * @internal * @since 0.0.1 */ -export type RulePreset = Record; +export type RuleConfig = Severity | [Severity, ...Partial]; /** * Rule context. @@ -50,3 +58,32 @@ export type RuleSuggest = { data?: Record; fix: tseslint.ReportFixFunction; }; + +/** + * A collection of settings. + */ +export interface SettingsConfig { + [key: string]: unknown; +} + +/* + * The following types that are intentionally wide/inaccurate, that exist + * for the purpose of satisfying both `defineConfig()` and `tseslint.config()`. + * See https://github.com/typescript-eslint/typescript-eslint/issues/10899 + * See https://github.com/typescript-eslint/typescript-eslint/blob/3a65920088a37d5a28ebb6f36fb82b7a091d3cb1/packages/typescript-eslint/src/compatibility-types.ts + */ + +export interface CompatiblePlugin { + meta: { + name: string; + version: string; + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + rules: Record; +} + +export interface CompatibleConfig { + name?: string; + rules?: Record; + settings?: SettingsConfig | undefined; +}