1- // For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format
2- import storybook from "eslint-plugin-storybook" ;
3- import { defineConfig } from "eslint/config" ;
4- import tsParser from "@typescript-eslint/parser" ;
5- import typescriptEslint from "@typescript-eslint/eslint-plugin" ;
6- import js from "@eslint/js" ;
7- import { FlatCompat } from "@eslint/eslintrc" ;
1+ import storybook from 'eslint-plugin-storybook'
2+ import tsParser from '@typescript-eslint/parser'
3+ import neostandard from 'neostandard'
4+ import globals from 'globals'
5+ import { fileURLToPath } from 'url'
6+ import { dirname } from 'path'
87
9- const compat = new FlatCompat ( {
10- baseDirectory : import . meta. dirname ?? process . cwd ( ) ,
11- recommendedConfig : js . configs . recommended ,
12- allConfig : js . configs . all
13- } ) ;
8+ const __dirname = dirname ( fileURLToPath ( import . meta. url ) )
149
15- export default defineConfig ( [ {
10+ export default [
11+ ...neostandard ( ) ,
12+ {
13+ ignores : [
14+ 'lib/**' ,
15+ 'node_modules/**' ,
16+ 'coverage/**' ,
17+ 'storybook-static/**'
18+ ] ,
19+ } ,
20+ {
21+ files : [ 'src/**/*.ts' ] ,
1622 languageOptions : {
17- parser : tsParser ,
23+ globals : {
24+ ...globals . browser ,
25+ ...globals . node ,
26+ Atomics : 'readonly' ,
27+ SharedArrayBuffer : 'readonly' ,
28+ } ,
29+ parser : tsParser ,
30+ parserOptions : {
31+ project : [ './tsconfig.json' ]
32+ } ,
1833 } ,
34+ rules : {
35+ // Style rules (not handled by TypeScript)
36+ semi : [ 'error' , 'never' ] ,
37+ quotes : [ 'error' , 'single' ] ,
1938
39+ // Disable ESLint rules that TypeScript handles better
40+ 'no-unused-vars' : 'off' , // TypeScript handles this via noUnusedLocals
41+ 'no-undef' : 'off' , // TypeScript handles undefined variables
42+ } ,
43+ settings : {
44+ react : {
45+ version : 'detect' ,
46+ } ,
47+ } ,
48+ } ,
49+ {
50+ files : [ 'src/**/*.tsx' ] ,
2051 plugins : {
21- "@typescript-eslint" : typescriptEslint ,
22- storybook,
52+ storybook,
2353 } ,
54+ languageOptions : {
55+ globals : {
56+ ...globals . browser ,
57+ ...globals . node ,
58+ Atomics : 'readonly' ,
59+ SharedArrayBuffer : 'readonly' ,
60+ } ,
61+ parser : tsParser ,
62+ parserOptions : {
63+ ecmaVersion : 2020 ,
64+ sourceType : 'module' ,
65+ ecmaFeatures : {
66+ jsx : true ,
67+ } ,
68+ } ,
69+ } ,
70+ rules : {
71+ // Style rules (not handled by TypeScript)
72+ semi : [ 'error' , 'never' ] ,
73+ quotes : [ 'error' , 'single' ] ,
2474
25- extends : compat . extends (
26- "eslint:recommended" ,
27- "plugin:@typescript-eslint/recommended" ,
28- "plugin:react/recommended" ,
29- ) ,
30-
75+ // Disable ESLint rules that TypeScript handles better
76+ 'no-unused-vars' : 'off' , // TypeScript handles this via noUnusedLocals
77+ 'no-undef' : 'off' , // TypeScript handles undefined variables
78+ } ,
3179 settings : {
32- react : {
33- version : "detect" ,
34- } ,
80+ react : {
81+ version : 'detect' ,
82+ } ,
83+ } ,
84+ } ,
85+ {
86+ files : [ 'src/**/*.js' , 'src/**/*.cjs' , 'src/**/*.mjs' ] ,
87+
88+ languageOptions : {
89+ globals : {
90+ ...globals . browser ,
91+ ...globals . node ,
92+ Atomics : 'readonly' ,
93+ SharedArrayBuffer : 'readonly' ,
94+ }
95+ } ,
96+ rules : {
97+ // Code style - match TypeScript settings
98+ semi : [ 'error' , 'never' ] ,
99+ quotes : [ 'error' , 'single' ] ,
100+
101+ // Strict checking - match TypeScript strictness
102+ 'no-console' : 'error' ,
103+ 'no-unused-vars' : 'error' , // Match TypeScript noUnusedLocals: true
104+ 'no-undef' : 'error' ,
105+ strict : [ 'error' , 'global' ] , // Match TypeScript alwaysStrict: true
106+
107+ // Additional strictness to match TypeScript behavior
108+ 'no-implicit-globals' : 'error' ,
109+ 'prefer-const' : 'error' , // Encourage immutability
110+ 'no-var' : 'error' , // Use let/const only
111+ 'no-redeclare' : 'error'
112+ } ,
113+ } ,
114+ {
115+ files : [ 'e2e-test/**/*.ts' , 'test/unit/**/*.ts' , 'test/unit/**/*.tsx' ] ,
116+ languageOptions : {
117+ parser : tsParser ,
118+ parserOptions : {
119+ project : './tsconfig.test.json' ,
120+ tsconfigRootDir : __dirname ,
121+ } ,
35122 } ,
36- } ] ) ;
123+ rules : {
124+ semi : [ 'error' , 'never' ] ,
125+ quotes : [ 'error' , 'single' ] ,
126+ 'no-console' : 'off' , // Allow console in tests
127+ 'no-undef' : 'off' , // Tests may define globals
128+ }
129+ } ,
130+ ]
0 commit comments