diff --git a/packages/plugins/eslint-plugin-react-debug/src/index.ts b/packages/plugins/eslint-plugin-react-debug/src/index.ts index f5ab58e39..05d4a4423 100644 --- a/packages/plugins/eslint-plugin-react-debug/src/index.ts +++ b/packages/plugins/eslint-plugin-react-debug/src/index.ts @@ -1,23 +1,9 @@ -import type { CompatibleConfig } from "@eslint-react/kit"; +import { getConfigAdapters } from "@eslint-react/shared"; import * as allConfig from "./configs/all"; import { plugin } from "./plugin"; -function toFlatConfig(config: CompatibleConfig) { - return { - ...config, - plugins: { - "react-debug": plugin, - }, - }; -} - -function toLegacyConfig({ rules }: CompatibleConfig) { - return { - plugins: ["react-debug"], - rules, - }; -} +const { toFlatConfig, toLegacyConfig } = getConfigAdapters("react-debug", plugin); export default { ...plugin, diff --git a/packages/plugins/eslint-plugin-react-dom/src/index.ts b/packages/plugins/eslint-plugin-react-dom/src/index.ts index 0e22cccec..a237809bf 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/index.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/index.ts @@ -1,23 +1,9 @@ -import type { CompatibleConfig } from "@eslint-react/kit"; +import { getConfigAdapters } from "@eslint-react/shared"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; -function toFlatConfig(config: CompatibleConfig) { - return { - ...config, - plugins: { - "react-dom": plugin, - }, - }; -} - -function toLegacyConfig({ rules }: CompatibleConfig) { - return { - plugins: ["react-dom"], - rules, - }; -} +const { toFlatConfig, toLegacyConfig } = getConfigAdapters("react-dom", plugin); export default { ...plugin, 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 6a2853583..0fc669868 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/index.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/index.ts @@ -1,23 +1,9 @@ -import type { CompatibleConfig } from "@eslint-react/kit"; +import { getConfigAdapters } from "@eslint-react/shared"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; -function toFlatConfig(config: CompatibleConfig) { - return { - ...config, - plugins: { - "react-hooks-extra": plugin, - }, - }; -} - -function toLegacyConfig({ rules }: CompatibleConfig) { - return { - plugins: ["react-hooks-extra"], - rules, - }; -} +const { toFlatConfig, toLegacyConfig } = getConfigAdapters("react-hooks-extra", plugin); export default { ...plugin, 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 99ca9c48e..288943c2d 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/src/index.ts +++ b/packages/plugins/eslint-plugin-react-naming-convention/src/index.ts @@ -1,23 +1,9 @@ -import type { CompatibleConfig } from "@eslint-react/kit"; +import { getConfigAdapters } from "@eslint-react/shared"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; -function toFlatConfig(config: CompatibleConfig) { - return { - ...config, - plugins: { - "react-naming-convention": plugin, - }, - }; -} - -function toLegacyConfig({ rules }: CompatibleConfig) { - return { - plugins: ["react-naming-convention"], - rules, - }; -} +const { toFlatConfig, toLegacyConfig } = getConfigAdapters("react-naming-convention", plugin); export default { ...plugin, 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 26244cbb7..6892523fa 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/index.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/index.ts @@ -1,23 +1,9 @@ -import type { CompatibleConfig } from "@eslint-react/kit"; +import { getConfigAdapters } from "@eslint-react/shared"; import * as recommendedConfig from "./configs/recommended"; import { plugin } from "./plugin"; -function toFlatConfig(config: CompatibleConfig) { - return { - ...config, - plugins: { - "react-web-api": plugin, - }, - }; -} - -function toLegacyConfig({ rules }: CompatibleConfig) { - return { - plugins: ["react-web-api"], - rules, - }; -} +const { toFlatConfig, toLegacyConfig } = getConfigAdapters("react-web-api", plugin); export default { ...plugin, diff --git a/packages/plugins/eslint-plugin-react-x/src/index.ts b/packages/plugins/eslint-plugin-react-x/src/index.ts index 09f9591c0..a999ff689 100644 --- a/packages/plugins/eslint-plugin-react-x/src/index.ts +++ b/packages/plugins/eslint-plugin-react-x/src/index.ts @@ -1,25 +1,11 @@ -import type { CompatibleConfig } from "@eslint-react/kit"; +import { getConfigAdapters } from "@eslint-react/shared"; import * as recommendedConfig from "./configs/recommended"; import * as recommendedTypeCheckedConfig from "./configs/recommended-type-checked"; import * as recommendedTypeScriptConfig from "./configs/recommended-typescript"; import { plugin } from "./plugin"; -function toFlatConfig(config: CompatibleConfig) { - return { - ...config, - plugins: { - "react-x": plugin, - }, - }; -} - -function toLegacyConfig({ rules }: CompatibleConfig) { - return { - plugins: ["react-x"], - rules, - }; -} +const { toFlatConfig, toLegacyConfig } = getConfigAdapters("react-x", plugin); export default { ...plugin, diff --git a/packages/shared/docs/README.md b/packages/shared/docs/README.md index 98b144f86..cdfc4e72c 100644 --- a/packages/shared/docs/README.md +++ b/packages/shared/docs/README.md @@ -36,6 +36,7 @@ - [coerceSettings](functions/coerceSettings.md) - [decodeESLintSettings](functions/decodeESLintSettings.md) - [decodeSettings](functions/decodeSettings.md) +- [getConfigAdapters](functions/getConfigAdapters.md) - [getReactVersion](functions/getReactVersion.md) - [getSettingsFromContext](functions/getSettingsFromContext.md) - [isESLintReactSettings](functions/isESLintReactSettings.md) diff --git a/packages/shared/docs/functions/getConfigAdapters.md b/packages/shared/docs/functions/getConfigAdapters.md new file mode 100644 index 000000000..1b20d5a48 --- /dev/null +++ b/packages/shared/docs/functions/getConfigAdapters.md @@ -0,0 +1,79 @@ +[**@eslint-react/shared**](../README.md) + +*** + +[@eslint-react/shared](../README.md) / getConfigAdapters + +# Function: getConfigAdapters() + +> **getConfigAdapters**(`pluginName`, `plugin`): `object` + +## Parameters + +### pluginName + +`string` + +### plugin + +`CompatiblePlugin` + +## Returns + +`object` + +### toFlatConfig() + +> **toFlatConfig**: (`config`) => `object` + +#### Parameters + +##### config + +`CompatibleConfig` + +#### Returns + +`object` + +##### name? + +> `optional` **name**: `string` + +##### plugins + +> **plugins**: `object` + +###### Index Signature + +\[`key`: `string`\]: `CompatiblePlugin` + +##### rules? + +> `optional` **rules**: [`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)\<`string`, `RuleConfig`\<`unknown`[]\>\> + +##### settings? + +> `optional` **settings**: `SettingsConfig` + +### toLegacyConfig() + +> **toLegacyConfig**: (`__namedParameters`) => `object` + +#### Parameters + +##### \_\_namedParameters + +`CompatibleConfig` + +#### Returns + +`object` + +##### plugins + +> **plugins**: `string`[] + +##### rules + +> **rules**: `undefined` \| [`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)\<`string`, `RuleConfig`\<`unknown`[]\>\> diff --git a/packages/shared/src/get-config-adapters.ts b/packages/shared/src/get-config-adapters.ts new file mode 100644 index 000000000..0208a0c34 --- /dev/null +++ b/packages/shared/src/get-config-adapters.ts @@ -0,0 +1,19 @@ +import type { CompatibleConfig, CompatiblePlugin } from "@eslint-react/kit"; + +export function getConfigAdapters(pluginName: string, plugin: CompatiblePlugin) { + function toFlatConfig(config: CompatibleConfig) { + return { + ...config, + plugins: { + [pluginName]: plugin, + }, + }; + } + function toLegacyConfig({ rules }: CompatibleConfig) { + return { + plugins: [pluginName], + rules, + }; + } + return { toFlatConfig, toLegacyConfig } as const; +} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index b9d6c5312..abfeefd3a 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,6 +1,7 @@ export * from "./_id"; export * from "./_require"; export * from "./constants"; +export * from "./get-config-adapters"; export * from "./get-doc-url"; export * from "./get-react-version"; export * from "./settings";