@xylabs/eslint-config-react-flat 8.2.3 → 8.2.5

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.
package/README.md CHANGED
@@ -38,12 +38,14 @@ bun add -D {{name}}
38
38
  Use this config in your `eslint.config.ts`:
39
39
 
40
40
  ```ts
41
- import type { Linter } from 'eslint'
42
-
43
- import { config } from '@xylabs/eslint-config-react-flat'
44
-
45
- const eslintConfig: Linter.Config[] = [
46
- ...config,
41
+ import {
42
+ configReactStorybook,
43
+ configReactTier3OpinionatedTypeChecked,
44
+ } from '@xylabs/eslint-config-react-flat'
45
+
46
+ const eslintConfig = [
47
+ ...configReactTier3OpinionatedTypeChecked,
48
+ ...configReactStorybook,
47
49
  ]
48
50
 
49
51
  export default eslintConfig
@@ -55,23 +57,21 @@ React layers are added at **tier 2 (best practices)** and above. Lower tiers mat
55
57
 
56
58
  | Export | Description |
57
59
  |--------|-------------|
58
- | `correctnessConfig` / `correctnessTypeCheckedConfig` | Base tier 0 only |
59
- | `consistencyConfig` / `consistencyTypeCheckedConfig` | Base tier 1 only |
60
- | `bestPracticesConfig` / `bestPracticesTypeCheckedConfig` | Base + React (**default** without storybook) |
61
- | `opinionatedConfig` / `opinionatedTypeCheckedConfig` | Stricter optional rules |
62
- | `strictConfig` / `strictTypeCheckedConfig` | Opinionated + SonarJS at error severity |
60
+ | `configReactTier0Correctness` / `configReactTier0CorrectnessTypeChecked` | Base tier 0 only |
61
+ | `configReactTier1Consistency` / `configReactTier1ConsistencyTypeChecked` | Base tier 1 only |
62
+ | `configReactTier2BestPractices` / `configReactTier2BestPracticesTypeChecked` | Base + React |
63
+ | `configReactTier3OpinionatedTypeChecked` | Stricter optional rules; preferred default |
64
+ | `configReactTier4Strict` / `configReactTier4StrictTypeChecked` | Opinionated + SonarJS at error severity |
63
65
 
64
- `config` includes storybook support via `recommendedTypeCheckedWithStorybookConfig`.
66
+ `config` is deprecated. Use `configReactTier3OpinionatedTypeChecked` instead, and add `configReactStorybook` explicitly if needed.
65
67
 
66
68
  ### Extending with custom rules
67
69
 
68
70
  ```ts
69
- import type { Linter } from 'eslint'
70
-
71
- import { config } from '@xylabs/eslint-config-react-flat'
71
+ import { configReactTier3OpinionatedTypeChecked } from '@xylabs/eslint-config-react-flat'
72
72
 
73
- const eslintConfig: Linter.Config[] = [
74
- ...config,
73
+ const eslintConfig = [
74
+ ...configReactTier3OpinionatedTypeChecked,
75
75
  {
76
76
  rules: {
77
77
  // your overrides
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/storybook/index.ts", "../../src/tiers/index.ts", "../../src/react/index.ts"],
4
- "sourcesContent": ["import type { Linter } from 'eslint'\nimport storybook from 'eslint-plugin-storybook'\n\nexport const storybookConfig: Linter.Config[] = storybook.configs['flat/recommended'] as Linter.Config[]\n", "import {\n configTier0Correctness, configTier0CorrectnessTypeChecked, configTier1Consistency,\n configTier1ConsistencyTypeChecked,\n configTier2BestPractices,\n configTier2BestPracticesTypeChecked,\n configTier3Opinionated,\n configTier3OpinionatedTypeChecked,\n configTier4Strict,\n configTier4StrictTypeChecked,\n} from '@xylabs/eslint-config-flat'\nimport type { Linter } from 'eslint'\n\nimport {\n reactBestPracticesConfig,\n reactBestPracticesTypeCheckedConfig,\n} from '../react/index.ts'\nimport { storybookConfig } from '../storybook/index.ts'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nexport const configReactStorybook: Linter.Config[] = [...storybookConfig]\n\nexport const configReactTier0Correctness: Linter.Config[] = [...configTier0Correctness]\n\nexport const configReactTier0CorrectnessTypeChecked: Linter.Config[] = [...configTier0CorrectnessTypeChecked]\n\nexport const configReactTier1Consistency: Linter.Config[] = [...configTier1Consistency]\n\nexport const configReactTier1ConsistencyTypeChecked: Linter.Config[] = [...configTier1ConsistencyTypeChecked]\n\nexport const configReactTier2BestPractices: Linter.Config[] = mergeTierConfigs(\n configTier2BestPractices,\n reactBestPracticesConfig,\n)\n\nexport const configReactTier2BestPracticesTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier2BestPracticesTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3Oopinionated: Linter.Config[] = mergeTierConfigs(\n configTier3Opinionated,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier3OpinionatedTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4Strict: Linter.Config[] = mergeTierConfigs(\n configTier4Strict,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4StrictTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier4StrictTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\n/** @deprecated Use `configReactTier2BestPractices` instead. */\nexport const recommendedConfig: Linter.Config[] = configReactTier2BestPractices\n\n/** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */\nexport const recommendedTypeCheckedConfig: Linter.Config[] = configReactTier2BestPracticesTypeChecked\n\nexport const recommendedTypeCheckedWithStorybookConfig: Linter.Config[] = mergeTierConfigs(\n configReactTier2BestPracticesTypeChecked,\n configReactStorybook,\n)\n\nexport const config: Linter.Config[] = recommendedTypeCheckedWithStorybookConfig\n", "import tsParser from '@typescript-eslint/parser'\nimport type { ESLint, Linter } from 'eslint'\nimport reactDomPlugin from 'eslint-plugin-react-dom'\nimport reactHooksPlugin from 'eslint-plugin-react-hooks'\nimport reactNamingConventionPlugin from 'eslint-plugin-react-naming-convention'\nimport eslintReactRefreshPlugin from 'eslint-plugin-react-refresh'\nimport reactWebApiPlugin from 'eslint-plugin-react-web-api'\nimport reactPlugin from 'eslint-plugin-react-x'\nimport globals from 'globals'\n\nconst reactFiles = ['**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}']\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n typeChecked = false,\n): Linter.Config[] {\n return (Array.isArray(configs) ? configs : [configs]).map(config => ({\n ...config,\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n ...config.languageOptions,\n globals: {\n ...(globals.browser as Record<string, boolean>),\n ...(config.languageOptions?.globals as Record<string, unknown> | undefined),\n },\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(config.languageOptions?.parserOptions as Record<string, unknown> | undefined),\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n },\n }))\n}\n\nfunction createReactOverride(typeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n globals: { ...globals.browser },\n },\n plugins: {\n 'react-dom': reactDomPlugin,\n 'react-web-api': reactWebApiPlugin,\n 'react-refresh': eslintReactRefreshPlugin,\n 'react-hooks': reactHooksPlugin as unknown as ESLint.Plugin,\n 'react-naming-convention': reactNamingConventionPlugin,\n },\n rules: {\n ...reactDomPlugin.configs.strict.rules,\n ...reactWebApiPlugin.configs.recommended.rules,\n ...reactHooksPlugin.configs.flat.recommended.rules,\n ...reactNamingConventionPlugin.configs.recommended.rules,\n ...eslintReactRefreshPlugin.configs.recommended.rules,\n 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }],\n 'react-hooks/use-memo': 'warn',\n 'react-hooks/set-state-in-effect': 'warn',\n },\n }\n}\n\nexport const reactBestPracticesConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-typescript']),\n createReactOverride(),\n]\n\nexport const reactBestPracticesTypeCheckedConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-type-checked'], true),\n createReactOverride(true),\n]\n\n/** @deprecated Use `reactBestPracticesConfig` instead. */\nexport const reactRecommendedConfig: Linter.Config[] = reactBestPracticesConfig\n\n/** @deprecated Use `reactBestPracticesTypeCheckedConfig` instead. */\nexport const reactRecommendedTypeCheckedConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { Linter } from 'eslint'\nimport storybook from 'eslint-plugin-storybook'\n\nexport const storybookConfig: Linter.Config[] = storybook.configs['flat/recommended'] as Linter.Config[]\n", "import {\n configTier0Correctness, configTier0CorrectnessTypeChecked, configTier1Consistency,\n configTier1ConsistencyTypeChecked,\n configTier2BestPractices,\n configTier2BestPracticesTypeChecked,\n configTier3Opinionated,\n configTier3OpinionatedTypeChecked,\n configTier4Strict,\n configTier4StrictTypeChecked,\n} from '@xylabs/eslint-config-flat'\nimport type { Linter } from 'eslint'\n\nimport {\n reactBestPracticesConfig,\n reactBestPracticesTypeCheckedConfig,\n} from '../react/index.ts'\nimport { storybookConfig } from '../storybook/index.ts'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nexport const configReactStorybook: Linter.Config[] = [...storybookConfig]\n\nexport const configReactTier0Correctness: Linter.Config[] = [...configTier0Correctness]\n\nexport const configReactTier0CorrectnessTypeChecked: Linter.Config[] = [...configTier0CorrectnessTypeChecked]\n\nexport const configReactTier1Consistency: Linter.Config[] = [...configTier1Consistency]\n\nexport const configReactTier1ConsistencyTypeChecked: Linter.Config[] = [...configTier1ConsistencyTypeChecked]\n\nexport const configReactTier2BestPractices: Linter.Config[] = mergeTierConfigs(\n configTier2BestPractices,\n reactBestPracticesConfig,\n)\n\nexport const configReactTier2BestPracticesTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier2BestPracticesTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3Oopinionated: Linter.Config[] = mergeTierConfigs(\n configTier3Opinionated,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier3OpinionatedTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4Strict: Linter.Config[] = mergeTierConfigs(\n configTier4Strict,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4StrictTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier4StrictTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\n/** @deprecated Use `configReactTier2BestPractices` instead. */\nexport const recommendedConfig: Linter.Config[] = configReactTier2BestPractices\n\n/** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */\nexport const recommendedTypeCheckedConfig: Linter.Config[] = configReactTier2BestPracticesTypeChecked\n\nexport const recommendedTypeCheckedWithStorybookConfig: Linter.Config[] = mergeTierConfigs(\n configReactTier2BestPracticesTypeChecked,\n configReactStorybook,\n)\n\n/** @deprecated Use `configReactTier3OpinionatedTypeChecked` instead. Add `configReactStorybook` explicitly if needed. */\nexport const config: Linter.Config[] = recommendedTypeCheckedWithStorybookConfig\n", "import tsParser from '@typescript-eslint/parser'\nimport type { ESLint, Linter } from 'eslint'\nimport reactDomPlugin from 'eslint-plugin-react-dom'\nimport reactHooksPlugin from 'eslint-plugin-react-hooks'\nimport reactNamingConventionPlugin from 'eslint-plugin-react-naming-convention'\nimport eslintReactRefreshPlugin from 'eslint-plugin-react-refresh'\nimport reactWebApiPlugin from 'eslint-plugin-react-web-api'\nimport reactPlugin from 'eslint-plugin-react-x'\nimport globals from 'globals'\n\nconst reactFiles = ['**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}']\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n typeChecked = false,\n): Linter.Config[] {\n return (Array.isArray(configs) ? configs : [configs]).map(config => ({\n ...config,\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n ...config.languageOptions,\n globals: {\n ...(globals.browser as Record<string, boolean>),\n ...(config.languageOptions?.globals as Record<string, unknown> | undefined),\n },\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(config.languageOptions?.parserOptions as Record<string, unknown> | undefined),\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n },\n }))\n}\n\nfunction createReactOverride(typeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n globals: { ...globals.browser },\n },\n plugins: {\n 'react-dom': reactDomPlugin,\n 'react-web-api': reactWebApiPlugin,\n 'react-refresh': eslintReactRefreshPlugin,\n 'react-hooks': reactHooksPlugin as unknown as ESLint.Plugin,\n 'react-naming-convention': reactNamingConventionPlugin,\n },\n rules: {\n ...reactDomPlugin.configs.strict.rules,\n ...reactWebApiPlugin.configs.recommended.rules,\n ...reactHooksPlugin.configs.flat.recommended.rules,\n ...reactNamingConventionPlugin.configs.recommended.rules,\n ...eslintReactRefreshPlugin.configs.recommended.rules,\n 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }],\n 'react-hooks/use-memo': 'warn',\n 'react-hooks/set-state-in-effect': 'warn',\n },\n }\n}\n\nexport const reactBestPracticesConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-typescript']),\n createReactOverride(),\n]\n\nexport const reactBestPracticesTypeCheckedConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-type-checked'], true),\n createReactOverride(true),\n]\n\n/** @deprecated Use `reactBestPracticesConfig` instead. */\nexport const reactRecommendedConfig: Linter.Config[] = reactBestPracticesConfig\n\n/** @deprecated Use `reactBestPracticesTypeCheckedConfig` instead. */\nexport const reactRecommendedTypeCheckedConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n"],
5
+ "mappings": "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",
6
6
  "names": ["config"]
7
7
  }
@@ -15,5 +15,6 @@ export declare const recommendedConfig: Linter.Config[];
15
15
  /** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */
16
16
  export declare const recommendedTypeCheckedConfig: Linter.Config[];
17
17
  export declare const recommendedTypeCheckedWithStorybookConfig: Linter.Config[];
18
+ /** @deprecated Use `configReactTier3OpinionatedTypeChecked` instead. Add `configReactStorybook` explicitly if needed. */
18
19
  export declare const config: Linter.Config[];
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tiers/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAYpC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAyB,CAAA;AAEzE,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAGxD,CAAA;AAED,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC,MAAM,EAGnE,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAGvD,CAAA;AAED,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAGjE,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAGjD,CAAA;AAED,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAG5D,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAkC,CAAA;AAE/E,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAA6C,CAAA;AAErG,eAAO,MAAM,yCAAyC,EAAE,MAAM,CAAC,MAAM,EAGpE,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAA8C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tiers/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAYpC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAyB,CAAA;AAEzE,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAGxD,CAAA;AAED,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC,MAAM,EAGnE,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAGvD,CAAA;AAED,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAGjE,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAGjD,CAAA;AAED,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAG5D,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAkC,CAAA;AAE/E,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAA6C,CAAA;AAErG,eAAO,MAAM,yCAAyC,EAAE,MAAM,CAAC,MAAM,EAGpE,CAAA;AAED,yHAAyH;AACzH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAA8C,CAAA"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/storybook/index.ts", "../../src/tiers/index.ts", "../../src/react/index.ts"],
4
- "sourcesContent": ["import type { Linter } from 'eslint'\nimport storybook from 'eslint-plugin-storybook'\n\nexport const storybookConfig: Linter.Config[] = storybook.configs['flat/recommended'] as Linter.Config[]\n", "import {\n configTier0Correctness, configTier0CorrectnessTypeChecked, configTier1Consistency,\n configTier1ConsistencyTypeChecked,\n configTier2BestPractices,\n configTier2BestPracticesTypeChecked,\n configTier3Opinionated,\n configTier3OpinionatedTypeChecked,\n configTier4Strict,\n configTier4StrictTypeChecked,\n} from '@xylabs/eslint-config-flat'\nimport type { Linter } from 'eslint'\n\nimport {\n reactBestPracticesConfig,\n reactBestPracticesTypeCheckedConfig,\n} from '../react/index.ts'\nimport { storybookConfig } from '../storybook/index.ts'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nexport const configReactStorybook: Linter.Config[] = [...storybookConfig]\n\nexport const configReactTier0Correctness: Linter.Config[] = [...configTier0Correctness]\n\nexport const configReactTier0CorrectnessTypeChecked: Linter.Config[] = [...configTier0CorrectnessTypeChecked]\n\nexport const configReactTier1Consistency: Linter.Config[] = [...configTier1Consistency]\n\nexport const configReactTier1ConsistencyTypeChecked: Linter.Config[] = [...configTier1ConsistencyTypeChecked]\n\nexport const configReactTier2BestPractices: Linter.Config[] = mergeTierConfigs(\n configTier2BestPractices,\n reactBestPracticesConfig,\n)\n\nexport const configReactTier2BestPracticesTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier2BestPracticesTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3Oopinionated: Linter.Config[] = mergeTierConfigs(\n configTier3Opinionated,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier3OpinionatedTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4Strict: Linter.Config[] = mergeTierConfigs(\n configTier4Strict,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4StrictTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier4StrictTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\n/** @deprecated Use `configReactTier2BestPractices` instead. */\nexport const recommendedConfig: Linter.Config[] = configReactTier2BestPractices\n\n/** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */\nexport const recommendedTypeCheckedConfig: Linter.Config[] = configReactTier2BestPracticesTypeChecked\n\nexport const recommendedTypeCheckedWithStorybookConfig: Linter.Config[] = mergeTierConfigs(\n configReactTier2BestPracticesTypeChecked,\n configReactStorybook,\n)\n\nexport const config: Linter.Config[] = recommendedTypeCheckedWithStorybookConfig\n", "import tsParser from '@typescript-eslint/parser'\nimport type { ESLint, Linter } from 'eslint'\nimport reactDomPlugin from 'eslint-plugin-react-dom'\nimport reactHooksPlugin from 'eslint-plugin-react-hooks'\nimport reactNamingConventionPlugin from 'eslint-plugin-react-naming-convention'\nimport eslintReactRefreshPlugin from 'eslint-plugin-react-refresh'\nimport reactWebApiPlugin from 'eslint-plugin-react-web-api'\nimport reactPlugin from 'eslint-plugin-react-x'\nimport globals from 'globals'\n\nconst reactFiles = ['**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}']\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n typeChecked = false,\n): Linter.Config[] {\n return (Array.isArray(configs) ? configs : [configs]).map(config => ({\n ...config,\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n ...config.languageOptions,\n globals: {\n ...(globals.browser as Record<string, boolean>),\n ...(config.languageOptions?.globals as Record<string, unknown> | undefined),\n },\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(config.languageOptions?.parserOptions as Record<string, unknown> | undefined),\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n },\n }))\n}\n\nfunction createReactOverride(typeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n globals: { ...globals.browser },\n },\n plugins: {\n 'react-dom': reactDomPlugin,\n 'react-web-api': reactWebApiPlugin,\n 'react-refresh': eslintReactRefreshPlugin,\n 'react-hooks': reactHooksPlugin as unknown as ESLint.Plugin,\n 'react-naming-convention': reactNamingConventionPlugin,\n },\n rules: {\n ...reactDomPlugin.configs.strict.rules,\n ...reactWebApiPlugin.configs.recommended.rules,\n ...reactHooksPlugin.configs.flat.recommended.rules,\n ...reactNamingConventionPlugin.configs.recommended.rules,\n ...eslintReactRefreshPlugin.configs.recommended.rules,\n 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }],\n 'react-hooks/use-memo': 'warn',\n 'react-hooks/set-state-in-effect': 'warn',\n },\n }\n}\n\nexport const reactBestPracticesConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-typescript']),\n createReactOverride(),\n]\n\nexport const reactBestPracticesTypeCheckedConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-type-checked'], true),\n createReactOverride(true),\n]\n\n/** @deprecated Use `reactBestPracticesConfig` instead. */\nexport const reactRecommendedConfig: Linter.Config[] = reactBestPracticesConfig\n\n/** @deprecated Use `reactBestPracticesTypeCheckedConfig` instead. */\nexport const reactRecommendedTypeCheckedConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { Linter } from 'eslint'\nimport storybook from 'eslint-plugin-storybook'\n\nexport const storybookConfig: Linter.Config[] = storybook.configs['flat/recommended'] as Linter.Config[]\n", "import {\n configTier0Correctness, configTier0CorrectnessTypeChecked, configTier1Consistency,\n configTier1ConsistencyTypeChecked,\n configTier2BestPractices,\n configTier2BestPracticesTypeChecked,\n configTier3Opinionated,\n configTier3OpinionatedTypeChecked,\n configTier4Strict,\n configTier4StrictTypeChecked,\n} from '@xylabs/eslint-config-flat'\nimport type { Linter } from 'eslint'\n\nimport {\n reactBestPracticesConfig,\n reactBestPracticesTypeCheckedConfig,\n} from '../react/index.ts'\nimport { storybookConfig } from '../storybook/index.ts'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nexport const configReactStorybook: Linter.Config[] = [...storybookConfig]\n\nexport const configReactTier0Correctness: Linter.Config[] = [...configTier0Correctness]\n\nexport const configReactTier0CorrectnessTypeChecked: Linter.Config[] = [...configTier0CorrectnessTypeChecked]\n\nexport const configReactTier1Consistency: Linter.Config[] = [...configTier1Consistency]\n\nexport const configReactTier1ConsistencyTypeChecked: Linter.Config[] = [...configTier1ConsistencyTypeChecked]\n\nexport const configReactTier2BestPractices: Linter.Config[] = mergeTierConfigs(\n configTier2BestPractices,\n reactBestPracticesConfig,\n)\n\nexport const configReactTier2BestPracticesTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier2BestPracticesTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3Oopinionated: Linter.Config[] = mergeTierConfigs(\n configTier3Opinionated,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier3OpinionatedTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4Strict: Linter.Config[] = mergeTierConfigs(\n configTier4Strict,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4StrictTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier4StrictTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\n/** @deprecated Use `configReactTier2BestPractices` instead. */\nexport const recommendedConfig: Linter.Config[] = configReactTier2BestPractices\n\n/** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */\nexport const recommendedTypeCheckedConfig: Linter.Config[] = configReactTier2BestPracticesTypeChecked\n\nexport const recommendedTypeCheckedWithStorybookConfig: Linter.Config[] = mergeTierConfigs(\n configReactTier2BestPracticesTypeChecked,\n configReactStorybook,\n)\n\n/** @deprecated Use `configReactTier3OpinionatedTypeChecked` instead. Add `configReactStorybook` explicitly if needed. */\nexport const config: Linter.Config[] = recommendedTypeCheckedWithStorybookConfig\n", "import tsParser from '@typescript-eslint/parser'\nimport type { ESLint, Linter } from 'eslint'\nimport reactDomPlugin from 'eslint-plugin-react-dom'\nimport reactHooksPlugin from 'eslint-plugin-react-hooks'\nimport reactNamingConventionPlugin from 'eslint-plugin-react-naming-convention'\nimport eslintReactRefreshPlugin from 'eslint-plugin-react-refresh'\nimport reactWebApiPlugin from 'eslint-plugin-react-web-api'\nimport reactPlugin from 'eslint-plugin-react-x'\nimport globals from 'globals'\n\nconst reactFiles = ['**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}']\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n typeChecked = false,\n): Linter.Config[] {\n return (Array.isArray(configs) ? configs : [configs]).map(config => ({\n ...config,\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n ...config.languageOptions,\n globals: {\n ...(globals.browser as Record<string, boolean>),\n ...(config.languageOptions?.globals as Record<string, unknown> | undefined),\n },\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(config.languageOptions?.parserOptions as Record<string, unknown> | undefined),\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n },\n }))\n}\n\nfunction createReactOverride(typeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...(typeChecked && { projectService: true, tsconfigRootDir: process.cwd() }),\n },\n globals: { ...globals.browser },\n },\n plugins: {\n 'react-dom': reactDomPlugin,\n 'react-web-api': reactWebApiPlugin,\n 'react-refresh': eslintReactRefreshPlugin,\n 'react-hooks': reactHooksPlugin as unknown as ESLint.Plugin,\n 'react-naming-convention': reactNamingConventionPlugin,\n },\n rules: {\n ...reactDomPlugin.configs.strict.rules,\n ...reactWebApiPlugin.configs.recommended.rules,\n ...reactHooksPlugin.configs.flat.recommended.rules,\n ...reactNamingConventionPlugin.configs.recommended.rules,\n ...eslintReactRefreshPlugin.configs.recommended.rules,\n 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }],\n 'react-hooks/use-memo': 'warn',\n 'react-hooks/set-state-in-effect': 'warn',\n },\n }\n}\n\nexport const reactBestPracticesConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-typescript']),\n createReactOverride(),\n]\n\nexport const reactBestPracticesTypeCheckedConfig: Linter.Config[] = [\n ...scopeReactConfigs(reactPlugin.configs['strict-type-checked'], true),\n createReactOverride(true),\n]\n\n/** @deprecated Use `reactBestPracticesConfig` instead. */\nexport const reactRecommendedConfig: Linter.Config[] = reactBestPracticesConfig\n\n/** @deprecated Use `reactBestPracticesTypeCheckedConfig` instead. */\nexport const reactRecommendedTypeCheckedConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n"],
5
+ "mappings": "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",
6
6
  "names": ["config"]
7
7
  }
@@ -15,5 +15,6 @@ export declare const recommendedConfig: Linter.Config[];
15
15
  /** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */
16
16
  export declare const recommendedTypeCheckedConfig: Linter.Config[];
17
17
  export declare const recommendedTypeCheckedWithStorybookConfig: Linter.Config[];
18
+ /** @deprecated Use `configReactTier3OpinionatedTypeChecked` instead. Add `configReactStorybook` explicitly if needed. */
18
19
  export declare const config: Linter.Config[];
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tiers/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAYpC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAyB,CAAA;AAEzE,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAGxD,CAAA;AAED,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC,MAAM,EAGnE,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAGvD,CAAA;AAED,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAGjE,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAGjD,CAAA;AAED,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAG5D,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAkC,CAAA;AAE/E,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAA6C,CAAA;AAErG,eAAO,MAAM,yCAAyC,EAAE,MAAM,CAAC,MAAM,EAGpE,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAA8C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tiers/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAYpC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAyB,CAAA;AAEzE,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAgC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAA2C,CAAA;AAE7G,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAGxD,CAAA;AAED,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC,MAAM,EAGnE,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAGvD,CAAA;AAED,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAGjE,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAGjD,CAAA;AAED,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAG5D,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAkC,CAAA;AAE/E,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAA6C,CAAA;AAErG,eAAO,MAAM,yCAAyC,EAAE,MAAM,CAAC,MAAM,EAGpE,CAAA;AAED,yHAAyH;AACzH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAA8C,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/eslint-config-react-flat",
3
- "version": "8.2.3",
3
+ "version": "8.2.5",
4
4
  "description": "ESLint Config used throughout XY Labs TypeScript/JavaScript libraries and react projects",
5
5
  "keywords": [
6
6
  "xylabs",
@@ -44,7 +44,7 @@
44
44
  "eslint-plugin-react-x": "^5.9.0",
45
45
  "eslint-plugin-storybook": "^10.4.4",
46
46
  "globals": "~17.6.0",
47
- "@xylabs/eslint-config-flat": "~8.2.3"
47
+ "@xylabs/eslint-config-flat": "~8.2.5"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@babel/core": "^7.29.7",
@@ -63,8 +63,8 @@
63
63
  "vite": "^8.0.16",
64
64
  "vitest": "~4.1.8",
65
65
  "zod": "^4.4.3",
66
- "@xylabs/tsconfig": "~8.2.3",
67
- "@xylabs/toolchain": "~8.2.3"
66
+ "@xylabs/toolchain": "~8.2.5",
67
+ "@xylabs/tsconfig": "~8.2.5"
68
68
  },
69
69
  "peerDependencies": {
70
70
  "browserslist": ">= 4.21.0",