@xylabs/eslint-config-react-flat 8.2.18 → 8.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.
package/README.md CHANGED
@@ -40,17 +40,19 @@ Use this config in your `eslint.config.ts`:
40
40
  ```ts
41
41
  import {
42
42
  configReactStorybook,
43
- configReactTier3OpinionatedTypeChecked,
43
+ recommendedConfig,
44
44
  } from '@xylabs/eslint-config-react-flat'
45
45
 
46
- const eslintConfig = [
47
- ...configReactTier3OpinionatedTypeChecked,
46
+ const xylabsConfig = recommendedConfig({ tier: 3, isTypeChecked: true })
47
+
48
+ export default [
49
+ ...xylabsConfig,
48
50
  ...configReactStorybook,
49
51
  ]
50
-
51
- export default eslintConfig
52
52
  ```
53
53
 
54
+ `recommendedConfig` accepts `tier` (0–4, default `3`) and `isTypeChecked` (default `true`). Named `configReactTier*` exports remain available but are deprecated.
55
+
54
56
  ### Tiered presets
55
57
 
56
58
  React layers are added at **tier 2 (best practices)** and above. Lower tiers match `@xylabs/eslint-config-flat` without React rules.
@@ -2,18 +2,12 @@
2
2
  import storybook from "eslint-plugin-storybook";
3
3
  var storybookConfig = storybook.configs["flat/recommended"];
4
4
 
5
- // src/tiers/index.ts
5
+ // src/tiers/recommendedConfig.ts
6
6
  import {
7
- configTier0Correctness,
8
- configTier0CorrectnessTypeChecked,
9
- configTier1Consistency,
10
- configTier1ConsistencyTypeChecked,
11
- configTier2BestPractices,
12
- configTier2BestPracticesTypeChecked,
13
- configTier3Opinionated,
14
- configTier3OpinionatedTypeChecked,
15
- configTier4Experimental,
16
- configTier4ExperimentalTypeChecked
7
+ applyRecommendedConfigTypeChecked as applyFlatRecommendedConfigTypeChecked,
8
+ parseRecommendedConfigSource as parseFlatRecommendedConfigSource,
9
+ recommendedConfig as flatRecommendedConfig,
10
+ resolveRecommendedConfigOptions
17
11
  } from "@xylabs/eslint-config-flat";
18
12
 
19
13
  // src/react/index.ts
@@ -96,47 +90,58 @@ var reactBestPracticesTypeCheckedConfig = [
96
90
  createReactOverride(true)
97
91
  ];
98
92
 
99
- // src/tiers/index.ts
93
+ // src/tiers/recommendedConfig.ts
94
+ import {
95
+ DEFAULT_RECOMMENDED_CONFIG_OPTIONS,
96
+ formatRecommendedConfigCall,
97
+ resolveRecommendedConfigOptions as resolveRecommendedConfigOptions2
98
+ } from "@xylabs/eslint-config-flat";
100
99
  function mergeTierConfigs(...parts) {
101
100
  return parts.flat();
102
101
  }
102
+ function reactLayersForTier(tier, isTypeChecked) {
103
+ if (tier <= 1) return [];
104
+ if (tier >= 3) return [...reactBestPracticesTypeCheckedConfig];
105
+ return isTypeChecked ? [...reactBestPracticesTypeCheckedConfig] : [...reactBestPracticesConfig];
106
+ }
107
+ function recommendedConfig(options) {
108
+ const resolved = resolveRecommendedConfigOptions(options);
109
+ return mergeTierConfigs(
110
+ flatRecommendedConfig(resolved),
111
+ reactLayersForTier(resolved.tier, resolved.isTypeChecked)
112
+ );
113
+ }
114
+ function parseRecommendedConfigSource(source) {
115
+ return parseFlatRecommendedConfigSource(source);
116
+ }
117
+ function applyRecommendedConfigTypeChecked(source, isEnabled) {
118
+ return applyFlatRecommendedConfigTypeChecked(source, isEnabled);
119
+ }
120
+
121
+ // src/tiers/index.ts
122
+ function mergeTierConfigs2(...parts) {
123
+ return parts.flat();
124
+ }
103
125
  var configReactStorybook = [...storybookConfig];
104
- var configReactTier0Correctness = [...configTier0Correctness];
105
- var configReactTier0CorrectnessTypeChecked = [...configTier0CorrectnessTypeChecked];
106
- var configReactTier1Consistency = [...configTier1Consistency];
107
- var configReactTier1ConsistencyTypeChecked = [...configTier1ConsistencyTypeChecked];
108
- var configReactTier2BestPractices = mergeTierConfigs(
109
- configTier2BestPractices,
110
- reactBestPracticesConfig
111
- );
112
- var configReactTier2BestPracticesTypeChecked = mergeTierConfigs(
113
- configTier2BestPracticesTypeChecked,
114
- reactBestPracticesTypeCheckedConfig
115
- );
116
- var configReactTier3Opinionated = mergeTierConfigs(
117
- configTier3Opinionated,
118
- reactBestPracticesTypeCheckedConfig
119
- );
120
- var configReactTier3OpinionatedTypeChecked = mergeTierConfigs(
121
- configTier3OpinionatedTypeChecked,
122
- reactBestPracticesTypeCheckedConfig
123
- );
124
- var configReactTier4Experimental = mergeTierConfigs(
125
- configTier4Experimental,
126
- reactBestPracticesTypeCheckedConfig
127
- );
128
- var configReactTier4ExperimentalTypeChecked = mergeTierConfigs(
129
- configTier4ExperimentalTypeChecked,
130
- reactBestPracticesTypeCheckedConfig
131
- );
132
- var recommendedConfig = configReactTier2BestPractices;
133
- var recommendedTypeCheckedConfig = configReactTier2BestPracticesTypeChecked;
134
- var recommendedTypeCheckedWithStorybookConfig = mergeTierConfigs(
135
- configReactTier2BestPracticesTypeChecked,
126
+ var configReactTier0Correctness = recommendedConfig({ tier: 0, isTypeChecked: false });
127
+ var configReactTier0CorrectnessTypeChecked = recommendedConfig({ tier: 0, isTypeChecked: true });
128
+ var configReactTier1Consistency = recommendedConfig({ tier: 1, isTypeChecked: false });
129
+ var configReactTier1ConsistencyTypeChecked = recommendedConfig({ tier: 1, isTypeChecked: true });
130
+ var configReactTier2BestPractices = recommendedConfig({ tier: 2, isTypeChecked: false });
131
+ var configReactTier2BestPracticesTypeChecked = recommendedConfig({ tier: 2, isTypeChecked: true });
132
+ var configReactTier3Opinionated = recommendedConfig({ tier: 3, isTypeChecked: false });
133
+ var configReactTier3OpinionatedTypeChecked = recommendedConfig({ tier: 3, isTypeChecked: true });
134
+ var configReactTier4Experimental = recommendedConfig({ tier: 4, isTypeChecked: false });
135
+ var configReactTier4ExperimentalTypeChecked = recommendedConfig({ tier: 4, isTypeChecked: true });
136
+ var recommendedTypeCheckedConfig = recommendedConfig({ tier: 2, isTypeChecked: true });
137
+ var recommendedTypeCheckedWithStorybookConfig = mergeTierConfigs2(
138
+ recommendedConfig({ tier: 2, isTypeChecked: true }),
136
139
  configReactStorybook
137
140
  );
138
141
  var config = recommendedTypeCheckedWithStorybookConfig;
139
142
  export {
143
+ DEFAULT_RECOMMENDED_CONFIG_OPTIONS,
144
+ applyRecommendedConfigTypeChecked,
140
145
  config,
141
146
  configReactStorybook,
142
147
  configReactTier0Correctness,
@@ -149,9 +154,12 @@ export {
149
154
  configReactTier3OpinionatedTypeChecked,
150
155
  configReactTier4Experimental,
151
156
  configReactTier4ExperimentalTypeChecked,
157
+ formatRecommendedConfigCall,
158
+ parseRecommendedConfigSource,
152
159
  recommendedConfig,
153
160
  recommendedTypeCheckedConfig,
154
161
  recommendedTypeCheckedWithStorybookConfig,
162
+ resolveRecommendedConfigOptions2 as resolveRecommendedConfigOptions,
155
163
  storybookConfig
156
164
  };
157
165
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 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 configTier4Experimental,\n configTier4ExperimentalTypeChecked,\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 configReactTier3Opinionated: Linter.Config[] = mergeTierConfigs(\n configTier3Opinionated,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier3OpinionatedTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4Experimental: Linter.Config[] = mergeTierConfigs(\n configTier4Experimental,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4ExperimentalTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier4ExperimentalTypeChecked,\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 currentWorkingDirectory(): string | undefined {\n return (globalThis as { process?: { cwd?: () => string } }).process?.cwd?.()\n}\n\nfunction typeCheckedParserOptions(isTypeChecked: boolean): Record<string, unknown> {\n if (!isTypeChecked) return {}\n const tsconfigRootDir = currentWorkingDirectory()\n const parserOptions: Record<string, unknown> = { projectService: true }\n if (tsconfigRootDir !== undefined) {\n parserOptions.tsconfigRootDir = tsconfigRootDir\n }\n return parserOptions\n}\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n isTypeChecked = 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 ...typeCheckedParserOptions(isTypeChecked),\n },\n },\n }))\n}\n\nfunction createReactOverride(isTypeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...typeCheckedParserOptions(isTypeChecked),\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\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n"],
5
- "mappings": "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",
6
- "names": ["config"]
3
+ "sources": ["../../src/storybook/index.ts", "../../src/tiers/recommendedConfig.ts", "../../src/react/index.ts", "../../src/tiers/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 applyRecommendedConfigTypeChecked as applyFlatRecommendedConfigTypeChecked,\n type LintTier,\n parseRecommendedConfigSource as parseFlatRecommendedConfigSource,\n recommendedConfig as flatRecommendedConfig,\n type RecommendedConfigOptions,\n resolveRecommendedConfigOptions,\n} from '@xylabs/eslint-config-flat'\nimport type { Linter } from 'eslint'\n\nimport {\n reactBestPracticesConfig,\n reactBestPracticesTypeCheckedConfig,\n} from '../react/index.ts'\n\nexport type { LintTier, RecommendedConfigOptions } from '@xylabs/eslint-config-flat'\nexport {\n DEFAULT_RECOMMENDED_CONFIG_OPTIONS,\n formatRecommendedConfigCall,\n resolveRecommendedConfigOptions,\n} from '@xylabs/eslint-config-flat'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nfunction reactLayersForTier(tier: LintTier, isTypeChecked: boolean): Linter.Config[] {\n if (tier <= 1) return []\n if (tier >= 3) return [...reactBestPracticesTypeCheckedConfig]\n return isTypeChecked ? [...reactBestPracticesTypeCheckedConfig] : [...reactBestPracticesConfig]\n}\n\nexport function recommendedConfig(options?: RecommendedConfigOptions): Linter.Config[] {\n const resolved = resolveRecommendedConfigOptions(options)\n return mergeTierConfigs(\n flatRecommendedConfig(resolved),\n reactLayersForTier(resolved.tier, resolved.isTypeChecked),\n )\n}\n\nexport function parseRecommendedConfigSource(\n source: string,\n): { configKind: 'custom' | 'preset'; options: Required<RecommendedConfigOptions> } | undefined {\n return parseFlatRecommendedConfigSource(source)\n}\n\nexport function applyRecommendedConfigTypeChecked(source: string, isEnabled: boolean): string {\n return applyFlatRecommendedConfigTypeChecked(source, isEnabled)\n}\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 currentWorkingDirectory(): string | undefined {\n return (globalThis as { process?: { cwd?: () => string } }).process?.cwd?.()\n}\n\nfunction typeCheckedParserOptions(isTypeChecked: boolean): Record<string, unknown> {\n if (!isTypeChecked) return {}\n const tsconfigRootDir = currentWorkingDirectory()\n const parserOptions: Record<string, unknown> = { projectService: true }\n if (tsconfigRootDir !== undefined) {\n parserOptions.tsconfigRootDir = tsconfigRootDir\n }\n return parserOptions\n}\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n isTypeChecked = 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 ...typeCheckedParserOptions(isTypeChecked),\n },\n },\n }))\n}\n\nfunction createReactOverride(isTypeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...typeCheckedParserOptions(isTypeChecked),\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\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n", "import type { Linter } from 'eslint'\n\nexport {\n applyRecommendedConfigTypeChecked,\n DEFAULT_RECOMMENDED_CONFIG_OPTIONS,\n formatRecommendedConfigCall,\n type LintTier,\n parseRecommendedConfigSource,\n recommendedConfig,\n type RecommendedConfigOptions,\n resolveRecommendedConfigOptions,\n} from './recommendedConfig.ts'\n\nimport { storybookConfig } from '../storybook/index.ts'\nimport { recommendedConfig } from './recommendedConfig.ts'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nexport const configReactStorybook: Linter.Config[] = [...storybookConfig]\n\n/** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: false })` instead. */\nexport const configReactTier0Correctness: Linter.Config[] = recommendedConfig({ tier: 0, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: true })` instead. */\nexport const configReactTier0CorrectnessTypeChecked: Linter.Config[] = recommendedConfig({ tier: 0, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: false })` instead. */\nexport const configReactTier1Consistency: Linter.Config[] = recommendedConfig({ tier: 1, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: true })` instead. */\nexport const configReactTier1ConsistencyTypeChecked: Linter.Config[] = recommendedConfig({ tier: 1, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: false })` instead. */\nexport const configReactTier2BestPractices: Linter.Config[] = recommendedConfig({ tier: 2, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */\nexport const configReactTier2BestPracticesTypeChecked: Linter.Config[] = recommendedConfig({ tier: 2, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: false })` instead. */\nexport const configReactTier3Opinionated: Linter.Config[] = recommendedConfig({ tier: 3, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` instead. */\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = recommendedConfig({ tier: 3, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: false })` instead. */\nexport const configReactTier4Experimental: Linter.Config[] = recommendedConfig({ tier: 4, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: true })` instead. */\nexport const configReactTier4ExperimentalTypeChecked: Linter.Config[] = recommendedConfig({ tier: 4, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */\nexport const recommendedTypeCheckedConfig: Linter.Config[] = recommendedConfig({ tier: 2, isTypeChecked: true })\n\nexport const recommendedTypeCheckedWithStorybookConfig: Linter.Config[] = mergeTierConfigs(\n recommendedConfig({ tier: 2, isTypeChecked: true }),\n configReactStorybook,\n)\n\n/** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` plus `configReactStorybook` if needed. */\nexport const config: Linter.Config[] = recommendedTypeCheckedWithStorybookConfig\n"],
5
+ "mappings": "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",
6
+ "names": ["config", "resolveRecommendedConfigOptions", "mergeTierConfigs"]
7
7
  }
@@ -1,20 +1,29 @@
1
1
  import type { Linter } from 'eslint';
2
+ export { applyRecommendedConfigTypeChecked, DEFAULT_RECOMMENDED_CONFIG_OPTIONS, formatRecommendedConfigCall, type LintTier, parseRecommendedConfigSource, recommendedConfig, type RecommendedConfigOptions, resolveRecommendedConfigOptions, } from './recommendedConfig.ts';
2
3
  export declare const configReactStorybook: Linter.Config[];
4
+ /** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: false })` instead. */
3
5
  export declare const configReactTier0Correctness: Linter.Config[];
6
+ /** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: true })` instead. */
4
7
  export declare const configReactTier0CorrectnessTypeChecked: Linter.Config[];
8
+ /** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: false })` instead. */
5
9
  export declare const configReactTier1Consistency: Linter.Config[];
10
+ /** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: true })` instead. */
6
11
  export declare const configReactTier1ConsistencyTypeChecked: Linter.Config[];
12
+ /** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: false })` instead. */
7
13
  export declare const configReactTier2BestPractices: Linter.Config[];
14
+ /** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */
8
15
  export declare const configReactTier2BestPracticesTypeChecked: Linter.Config[];
16
+ /** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: false })` instead. */
9
17
  export declare const configReactTier3Opinionated: Linter.Config[];
18
+ /** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` instead. */
10
19
  export declare const configReactTier3OpinionatedTypeChecked: Linter.Config[];
20
+ /** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: false })` instead. */
11
21
  export declare const configReactTier4Experimental: Linter.Config[];
22
+ /** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: true })` instead. */
12
23
  export declare const configReactTier4ExperimentalTypeChecked: Linter.Config[];
13
- /** @deprecated Use `configReactTier2BestPractices` instead. */
14
- export declare const recommendedConfig: Linter.Config[];
15
- /** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */
24
+ /** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */
16
25
  export declare const recommendedTypeCheckedConfig: Linter.Config[];
17
26
  export declare const recommendedTypeCheckedWithStorybookConfig: Linter.Config[];
18
- /** @deprecated Use `configReactTier3OpinionatedTypeChecked` instead. Add `configReactStorybook` explicitly if needed. */
27
+ /** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` plus `configReactStorybook` if needed. */
19
28
  export declare const config: Linter.Config[];
20
29
  //# 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,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAGtD,CAAA;AAED,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAGjE,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAGvD,CAAA;AAED,eAAO,MAAM,uCAAuC,EAAE,MAAM,CAAC,MAAM,EAGlE,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
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tiers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,EACL,iCAAiC,EACjC,kCAAkC,EAClC,2BAA2B,EAC3B,KAAK,QAAQ,EACb,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,+BAA+B,GAChC,MAAM,wBAAwB,CAAA;AAS/B,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAyB,CAAA;AAEzE,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEhH,qFAAqF;AACrF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE1H,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEhH,qFAAqF;AACrF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE1H,sFAAsF;AACtF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAElH,qFAAqF;AACrF,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE5H,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEhH,qFAAqF;AACrF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE1H,sFAAsF;AACtF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEjH,qFAAqF;AACrF,eAAO,MAAM,uCAAuC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE3H,qFAAqF;AACrF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAEhH,eAAO,MAAM,yCAAyC,EAAE,MAAM,CAAC,MAAM,EAGpE,CAAA;AAED,mHAAmH;AACnH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAA8C,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { type RecommendedConfigOptions } from '@xylabs/eslint-config-flat';
2
+ import type { Linter } from 'eslint';
3
+ export type { LintTier, RecommendedConfigOptions } from '@xylabs/eslint-config-flat';
4
+ export { DEFAULT_RECOMMENDED_CONFIG_OPTIONS, formatRecommendedConfigCall, resolveRecommendedConfigOptions, } from '@xylabs/eslint-config-flat';
5
+ export declare function recommendedConfig(options?: RecommendedConfigOptions): Linter.Config[];
6
+ export declare function parseRecommendedConfigSource(source: string): {
7
+ configKind: 'custom' | 'preset';
8
+ options: Required<RecommendedConfigOptions>;
9
+ } | undefined;
10
+ export declare function applyRecommendedConfigTypeChecked(source: string, isEnabled: boolean): string;
11
+ //# sourceMappingURL=recommendedConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendedConfig.d.ts","sourceRoot":"","sources":["../../../src/tiers/recommendedConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAOpC,YAAY,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACpF,OAAO,EACL,kCAAkC,EAClC,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,4BAA4B,CAAA;AAYnC,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,CAMrF;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GACb;IAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAA;CAAE,GAAG,SAAS,CAE9F;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAE5F"}
@@ -2,18 +2,12 @@
2
2
  import storybook from "eslint-plugin-storybook";
3
3
  var storybookConfig = storybook.configs["flat/recommended"];
4
4
 
5
- // src/tiers/index.ts
5
+ // src/tiers/recommendedConfig.ts
6
6
  import {
7
- configTier0Correctness,
8
- configTier0CorrectnessTypeChecked,
9
- configTier1Consistency,
10
- configTier1ConsistencyTypeChecked,
11
- configTier2BestPractices,
12
- configTier2BestPracticesTypeChecked,
13
- configTier3Opinionated,
14
- configTier3OpinionatedTypeChecked,
15
- configTier4Experimental,
16
- configTier4ExperimentalTypeChecked
7
+ applyRecommendedConfigTypeChecked as applyFlatRecommendedConfigTypeChecked,
8
+ parseRecommendedConfigSource as parseFlatRecommendedConfigSource,
9
+ recommendedConfig as flatRecommendedConfig,
10
+ resolveRecommendedConfigOptions
17
11
  } from "@xylabs/eslint-config-flat";
18
12
 
19
13
  // src/react/index.ts
@@ -96,47 +90,58 @@ var reactBestPracticesTypeCheckedConfig = [
96
90
  createReactOverride(true)
97
91
  ];
98
92
 
99
- // src/tiers/index.ts
93
+ // src/tiers/recommendedConfig.ts
94
+ import {
95
+ DEFAULT_RECOMMENDED_CONFIG_OPTIONS,
96
+ formatRecommendedConfigCall,
97
+ resolveRecommendedConfigOptions as resolveRecommendedConfigOptions2
98
+ } from "@xylabs/eslint-config-flat";
100
99
  function mergeTierConfigs(...parts) {
101
100
  return parts.flat();
102
101
  }
102
+ function reactLayersForTier(tier, isTypeChecked) {
103
+ if (tier <= 1) return [];
104
+ if (tier >= 3) return [...reactBestPracticesTypeCheckedConfig];
105
+ return isTypeChecked ? [...reactBestPracticesTypeCheckedConfig] : [...reactBestPracticesConfig];
106
+ }
107
+ function recommendedConfig(options) {
108
+ const resolved = resolveRecommendedConfigOptions(options);
109
+ return mergeTierConfigs(
110
+ flatRecommendedConfig(resolved),
111
+ reactLayersForTier(resolved.tier, resolved.isTypeChecked)
112
+ );
113
+ }
114
+ function parseRecommendedConfigSource(source) {
115
+ return parseFlatRecommendedConfigSource(source);
116
+ }
117
+ function applyRecommendedConfigTypeChecked(source, isEnabled) {
118
+ return applyFlatRecommendedConfigTypeChecked(source, isEnabled);
119
+ }
120
+
121
+ // src/tiers/index.ts
122
+ function mergeTierConfigs2(...parts) {
123
+ return parts.flat();
124
+ }
103
125
  var configReactStorybook = [...storybookConfig];
104
- var configReactTier0Correctness = [...configTier0Correctness];
105
- var configReactTier0CorrectnessTypeChecked = [...configTier0CorrectnessTypeChecked];
106
- var configReactTier1Consistency = [...configTier1Consistency];
107
- var configReactTier1ConsistencyTypeChecked = [...configTier1ConsistencyTypeChecked];
108
- var configReactTier2BestPractices = mergeTierConfigs(
109
- configTier2BestPractices,
110
- reactBestPracticesConfig
111
- );
112
- var configReactTier2BestPracticesTypeChecked = mergeTierConfigs(
113
- configTier2BestPracticesTypeChecked,
114
- reactBestPracticesTypeCheckedConfig
115
- );
116
- var configReactTier3Opinionated = mergeTierConfigs(
117
- configTier3Opinionated,
118
- reactBestPracticesTypeCheckedConfig
119
- );
120
- var configReactTier3OpinionatedTypeChecked = mergeTierConfigs(
121
- configTier3OpinionatedTypeChecked,
122
- reactBestPracticesTypeCheckedConfig
123
- );
124
- var configReactTier4Experimental = mergeTierConfigs(
125
- configTier4Experimental,
126
- reactBestPracticesTypeCheckedConfig
127
- );
128
- var configReactTier4ExperimentalTypeChecked = mergeTierConfigs(
129
- configTier4ExperimentalTypeChecked,
130
- reactBestPracticesTypeCheckedConfig
131
- );
132
- var recommendedConfig = configReactTier2BestPractices;
133
- var recommendedTypeCheckedConfig = configReactTier2BestPracticesTypeChecked;
134
- var recommendedTypeCheckedWithStorybookConfig = mergeTierConfigs(
135
- configReactTier2BestPracticesTypeChecked,
126
+ var configReactTier0Correctness = recommendedConfig({ tier: 0, isTypeChecked: false });
127
+ var configReactTier0CorrectnessTypeChecked = recommendedConfig({ tier: 0, isTypeChecked: true });
128
+ var configReactTier1Consistency = recommendedConfig({ tier: 1, isTypeChecked: false });
129
+ var configReactTier1ConsistencyTypeChecked = recommendedConfig({ tier: 1, isTypeChecked: true });
130
+ var configReactTier2BestPractices = recommendedConfig({ tier: 2, isTypeChecked: false });
131
+ var configReactTier2BestPracticesTypeChecked = recommendedConfig({ tier: 2, isTypeChecked: true });
132
+ var configReactTier3Opinionated = recommendedConfig({ tier: 3, isTypeChecked: false });
133
+ var configReactTier3OpinionatedTypeChecked = recommendedConfig({ tier: 3, isTypeChecked: true });
134
+ var configReactTier4Experimental = recommendedConfig({ tier: 4, isTypeChecked: false });
135
+ var configReactTier4ExperimentalTypeChecked = recommendedConfig({ tier: 4, isTypeChecked: true });
136
+ var recommendedTypeCheckedConfig = recommendedConfig({ tier: 2, isTypeChecked: true });
137
+ var recommendedTypeCheckedWithStorybookConfig = mergeTierConfigs2(
138
+ recommendedConfig({ tier: 2, isTypeChecked: true }),
136
139
  configReactStorybook
137
140
  );
138
141
  var config = recommendedTypeCheckedWithStorybookConfig;
139
142
  export {
143
+ DEFAULT_RECOMMENDED_CONFIG_OPTIONS,
144
+ applyRecommendedConfigTypeChecked,
140
145
  config,
141
146
  configReactStorybook,
142
147
  configReactTier0Correctness,
@@ -149,9 +154,12 @@ export {
149
154
  configReactTier3OpinionatedTypeChecked,
150
155
  configReactTier4Experimental,
151
156
  configReactTier4ExperimentalTypeChecked,
157
+ formatRecommendedConfigCall,
158
+ parseRecommendedConfigSource,
152
159
  recommendedConfig,
153
160
  recommendedTypeCheckedConfig,
154
161
  recommendedTypeCheckedWithStorybookConfig,
162
+ resolveRecommendedConfigOptions2 as resolveRecommendedConfigOptions,
155
163
  storybookConfig
156
164
  };
157
165
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 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 configTier4Experimental,\n configTier4ExperimentalTypeChecked,\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 configReactTier3Opinionated: Linter.Config[] = mergeTierConfigs(\n configTier3Opinionated,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier3OpinionatedTypeChecked,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4Experimental: Linter.Config[] = mergeTierConfigs(\n configTier4Experimental,\n reactBestPracticesTypeCheckedConfig,\n)\n\nexport const configReactTier4ExperimentalTypeChecked: Linter.Config[] = mergeTierConfigs(\n configTier4ExperimentalTypeChecked,\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 currentWorkingDirectory(): string | undefined {\n return (globalThis as { process?: { cwd?: () => string } }).process?.cwd?.()\n}\n\nfunction typeCheckedParserOptions(isTypeChecked: boolean): Record<string, unknown> {\n if (!isTypeChecked) return {}\n const tsconfigRootDir = currentWorkingDirectory()\n const parserOptions: Record<string, unknown> = { projectService: true }\n if (tsconfigRootDir !== undefined) {\n parserOptions.tsconfigRootDir = tsconfigRootDir\n }\n return parserOptions\n}\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n isTypeChecked = 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 ...typeCheckedParserOptions(isTypeChecked),\n },\n },\n }))\n}\n\nfunction createReactOverride(isTypeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...typeCheckedParserOptions(isTypeChecked),\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\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n"],
5
- "mappings": "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",
6
- "names": ["config"]
3
+ "sources": ["../../src/storybook/index.ts", "../../src/tiers/recommendedConfig.ts", "../../src/react/index.ts", "../../src/tiers/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 applyRecommendedConfigTypeChecked as applyFlatRecommendedConfigTypeChecked,\n type LintTier,\n parseRecommendedConfigSource as parseFlatRecommendedConfigSource,\n recommendedConfig as flatRecommendedConfig,\n type RecommendedConfigOptions,\n resolveRecommendedConfigOptions,\n} from '@xylabs/eslint-config-flat'\nimport type { Linter } from 'eslint'\n\nimport {\n reactBestPracticesConfig,\n reactBestPracticesTypeCheckedConfig,\n} from '../react/index.ts'\n\nexport type { LintTier, RecommendedConfigOptions } from '@xylabs/eslint-config-flat'\nexport {\n DEFAULT_RECOMMENDED_CONFIG_OPTIONS,\n formatRecommendedConfigCall,\n resolveRecommendedConfigOptions,\n} from '@xylabs/eslint-config-flat'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nfunction reactLayersForTier(tier: LintTier, isTypeChecked: boolean): Linter.Config[] {\n if (tier <= 1) return []\n if (tier >= 3) return [...reactBestPracticesTypeCheckedConfig]\n return isTypeChecked ? [...reactBestPracticesTypeCheckedConfig] : [...reactBestPracticesConfig]\n}\n\nexport function recommendedConfig(options?: RecommendedConfigOptions): Linter.Config[] {\n const resolved = resolveRecommendedConfigOptions(options)\n return mergeTierConfigs(\n flatRecommendedConfig(resolved),\n reactLayersForTier(resolved.tier, resolved.isTypeChecked),\n )\n}\n\nexport function parseRecommendedConfigSource(\n source: string,\n): { configKind: 'custom' | 'preset'; options: Required<RecommendedConfigOptions> } | undefined {\n return parseFlatRecommendedConfigSource(source)\n}\n\nexport function applyRecommendedConfigTypeChecked(source: string, isEnabled: boolean): string {\n return applyFlatRecommendedConfigTypeChecked(source, isEnabled)\n}\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 currentWorkingDirectory(): string | undefined {\n return (globalThis as { process?: { cwd?: () => string } }).process?.cwd?.()\n}\n\nfunction typeCheckedParserOptions(isTypeChecked: boolean): Record<string, unknown> {\n if (!isTypeChecked) return {}\n const tsconfigRootDir = currentWorkingDirectory()\n const parserOptions: Record<string, unknown> = { projectService: true }\n if (tsconfigRootDir !== undefined) {\n parserOptions.tsconfigRootDir = tsconfigRootDir\n }\n return parserOptions\n}\n\nfunction scopeReactConfigs(\n configs: Linter.Config | Linter.Config[],\n isTypeChecked = 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 ...typeCheckedParserOptions(isTypeChecked),\n },\n },\n }))\n}\n\nfunction createReactOverride(isTypeChecked = false): Linter.Config {\n return {\n files: reactFiles,\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: { jsx: true },\n ...typeCheckedParserOptions(isTypeChecked),\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\nexport const reactConfig: Linter.Config[] = reactBestPracticesTypeCheckedConfig\n", "import type { Linter } from 'eslint'\n\nexport {\n applyRecommendedConfigTypeChecked,\n DEFAULT_RECOMMENDED_CONFIG_OPTIONS,\n formatRecommendedConfigCall,\n type LintTier,\n parseRecommendedConfigSource,\n recommendedConfig,\n type RecommendedConfigOptions,\n resolveRecommendedConfigOptions,\n} from './recommendedConfig.ts'\n\nimport { storybookConfig } from '../storybook/index.ts'\nimport { recommendedConfig } from './recommendedConfig.ts'\n\nfunction mergeTierConfigs(...parts: readonly Linter.Config[][]): Linter.Config[] {\n return parts.flat()\n}\n\nexport const configReactStorybook: Linter.Config[] = [...storybookConfig]\n\n/** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: false })` instead. */\nexport const configReactTier0Correctness: Linter.Config[] = recommendedConfig({ tier: 0, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: true })` instead. */\nexport const configReactTier0CorrectnessTypeChecked: Linter.Config[] = recommendedConfig({ tier: 0, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: false })` instead. */\nexport const configReactTier1Consistency: Linter.Config[] = recommendedConfig({ tier: 1, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: true })` instead. */\nexport const configReactTier1ConsistencyTypeChecked: Linter.Config[] = recommendedConfig({ tier: 1, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: false })` instead. */\nexport const configReactTier2BestPractices: Linter.Config[] = recommendedConfig({ tier: 2, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */\nexport const configReactTier2BestPracticesTypeChecked: Linter.Config[] = recommendedConfig({ tier: 2, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: false })` instead. */\nexport const configReactTier3Opinionated: Linter.Config[] = recommendedConfig({ tier: 3, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` instead. */\nexport const configReactTier3OpinionatedTypeChecked: Linter.Config[] = recommendedConfig({ tier: 3, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: false })` instead. */\nexport const configReactTier4Experimental: Linter.Config[] = recommendedConfig({ tier: 4, isTypeChecked: false })\n\n/** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: true })` instead. */\nexport const configReactTier4ExperimentalTypeChecked: Linter.Config[] = recommendedConfig({ tier: 4, isTypeChecked: true })\n\n/** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */\nexport const recommendedTypeCheckedConfig: Linter.Config[] = recommendedConfig({ tier: 2, isTypeChecked: true })\n\nexport const recommendedTypeCheckedWithStorybookConfig: Linter.Config[] = mergeTierConfigs(\n recommendedConfig({ tier: 2, isTypeChecked: true }),\n configReactStorybook,\n)\n\n/** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` plus `configReactStorybook` if needed. */\nexport const config: Linter.Config[] = recommendedTypeCheckedWithStorybookConfig\n"],
5
+ "mappings": "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",
6
+ "names": ["config", "resolveRecommendedConfigOptions", "mergeTierConfigs"]
7
7
  }
@@ -1,20 +1,29 @@
1
1
  import type { Linter } from 'eslint';
2
+ export { applyRecommendedConfigTypeChecked, DEFAULT_RECOMMENDED_CONFIG_OPTIONS, formatRecommendedConfigCall, type LintTier, parseRecommendedConfigSource, recommendedConfig, type RecommendedConfigOptions, resolveRecommendedConfigOptions, } from './recommendedConfig.ts';
2
3
  export declare const configReactStorybook: Linter.Config[];
4
+ /** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: false })` instead. */
3
5
  export declare const configReactTier0Correctness: Linter.Config[];
6
+ /** @deprecated Use `recommendedConfig({ tier: 0, isTypeChecked: true })` instead. */
4
7
  export declare const configReactTier0CorrectnessTypeChecked: Linter.Config[];
8
+ /** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: false })` instead. */
5
9
  export declare const configReactTier1Consistency: Linter.Config[];
10
+ /** @deprecated Use `recommendedConfig({ tier: 1, isTypeChecked: true })` instead. */
6
11
  export declare const configReactTier1ConsistencyTypeChecked: Linter.Config[];
12
+ /** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: false })` instead. */
7
13
  export declare const configReactTier2BestPractices: Linter.Config[];
14
+ /** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */
8
15
  export declare const configReactTier2BestPracticesTypeChecked: Linter.Config[];
16
+ /** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: false })` instead. */
9
17
  export declare const configReactTier3Opinionated: Linter.Config[];
18
+ /** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` instead. */
10
19
  export declare const configReactTier3OpinionatedTypeChecked: Linter.Config[];
20
+ /** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: false })` instead. */
11
21
  export declare const configReactTier4Experimental: Linter.Config[];
22
+ /** @deprecated Use `recommendedConfig({ tier: 4, isTypeChecked: true })` instead. */
12
23
  export declare const configReactTier4ExperimentalTypeChecked: Linter.Config[];
13
- /** @deprecated Use `configReactTier2BestPractices` instead. */
14
- export declare const recommendedConfig: Linter.Config[];
15
- /** @deprecated Use `configReactTier2BestPracticesTypeChecked` instead. */
24
+ /** @deprecated Use `recommendedConfig({ tier: 2, isTypeChecked: true })` instead. */
16
25
  export declare const recommendedTypeCheckedConfig: Linter.Config[];
17
26
  export declare const recommendedTypeCheckedWithStorybookConfig: Linter.Config[];
18
- /** @deprecated Use `configReactTier3OpinionatedTypeChecked` instead. Add `configReactStorybook` explicitly if needed. */
27
+ /** @deprecated Use `recommendedConfig({ tier: 3, isTypeChecked: true })` plus `configReactStorybook` if needed. */
19
28
  export declare const config: Linter.Config[];
20
29
  //# 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,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAGtD,CAAA;AAED,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAGjE,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAGvD,CAAA;AAED,eAAO,MAAM,uCAAuC,EAAE,MAAM,CAAC,MAAM,EAGlE,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
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tiers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,EACL,iCAAiC,EACjC,kCAAkC,EAClC,2BAA2B,EAC3B,KAAK,QAAQ,EACb,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,+BAA+B,GAChC,MAAM,wBAAwB,CAAA;AAS/B,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAyB,CAAA;AAEzE,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEhH,qFAAqF;AACrF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE1H,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEhH,qFAAqF;AACrF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE1H,sFAAsF;AACtF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAElH,qFAAqF;AACrF,eAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE5H,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEhH,qFAAqF;AACrF,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE1H,sFAAsF;AACtF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAyD,CAAA;AAEjH,qFAAqF;AACrF,eAAO,MAAM,uCAAuC,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAE3H,qFAAqF;AACrF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAwD,CAAA;AAEhH,eAAO,MAAM,yCAAyC,EAAE,MAAM,CAAC,MAAM,EAGpE,CAAA;AAED,mHAAmH;AACnH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAA8C,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { type RecommendedConfigOptions } from '@xylabs/eslint-config-flat';
2
+ import type { Linter } from 'eslint';
3
+ export type { LintTier, RecommendedConfigOptions } from '@xylabs/eslint-config-flat';
4
+ export { DEFAULT_RECOMMENDED_CONFIG_OPTIONS, formatRecommendedConfigCall, resolveRecommendedConfigOptions, } from '@xylabs/eslint-config-flat';
5
+ export declare function recommendedConfig(options?: RecommendedConfigOptions): Linter.Config[];
6
+ export declare function parseRecommendedConfigSource(source: string): {
7
+ configKind: 'custom' | 'preset';
8
+ options: Required<RecommendedConfigOptions>;
9
+ } | undefined;
10
+ export declare function applyRecommendedConfigTypeChecked(source: string, isEnabled: boolean): string;
11
+ //# sourceMappingURL=recommendedConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendedConfig.d.ts","sourceRoot":"","sources":["../../../src/tiers/recommendedConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAOpC,YAAY,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACpF,OAAO,EACL,kCAAkC,EAClC,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,4BAA4B,CAAA;AAYnC,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,CAMrF;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GACb;IAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAA;CAAE,GAAG,SAAS,CAE9F;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAE5F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/eslint-config-react-flat",
3
- "version": "8.2.18",
3
+ "version": "8.3.0",
4
4
  "description": "ESLint Config used throughout XY Labs TypeScript/JavaScript libraries and react projects",
5
5
  "keywords": [
6
6
  "xylabs",
@@ -52,7 +52,7 @@
52
52
  "eslint-plugin-react-x": "^5.9.0",
53
53
  "eslint-plugin-storybook": "^10.4.6",
54
54
  "globals": "~17.6.0",
55
- "@xylabs/eslint-config-flat": "~8.2.18"
55
+ "@xylabs/eslint-config-flat": "~8.3.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@testing-library/dom": "^10.4.1",
@@ -70,8 +70,8 @@
70
70
  "vite": "^8.0.16",
71
71
  "vitest": "~4.1.9",
72
72
  "zod": "^4.4.3",
73
- "@xylabs/toolchain": "~8.2.18",
74
- "@xylabs/tsconfig": "~8.2.18"
73
+ "@xylabs/tsconfig": "~8.3.0",
74
+ "@xylabs/toolchain": "~8.3.0"
75
75
  },
76
76
  "peerDependencies": {
77
77
  "browserslist": ">= 4.21.0",