Sharable eslint config created and used by Valian
@eslint/js- Core ESLint rules@typescript-eslint/eslint-plugin- TypeScript-specific linting rules@stylistic/eslint-plugin- Stylistic formatting ruleseslint-config-prettier- Disables conflicting ESLint rules with Prettier@eslint-community/eslint-plugin-eslint-comments- Best practices for ESLint directive commentseslint-plugin-import-x- ES6+ import/export syntax supporteslint-plugin-jest- Jest testing framework ruleseslint-plugin-jest-formatting- Formatting rules for Jest testseslint-plugin-no-use-extend-native- Prevents extending native objectseslint-plugin-promise- Best practices for JavaScript promiseseslint-plugin-simple-import-sort- Auto-fixable import sortingeslint-plugin-unicorn- Various powerful ESLint rules
@eslint/json- JSON file linting
eslint-plugin-n- Node.js specific linting rules
eslint-plugin-react- React-specific linting ruleseslint-plugin-react-hooks- Rules of Hooks for Reacteslint-plugin-react-refresh- Validates React Fast Refresh constraints
eslint-plugin-storybook- Best practices for Storybook
This plugin is an optional peer dependency. When writing Storybook stories, it provides best practices and catches common mistakes specific to Storybook usage. It includes rules for proper story structure, CSF (Component Story Format) compliance, and Storybook-specific patterns. Only install this plugin if you're using Storybook in your project.
To use it:
pnpm add -D eslint-plugin-storybookThen include the storybook configuration in your ESLint config:
import { config } from '@valian/eslint-config'
import { storybook } from '@valian/eslint-config/storybook'
export default [
...config.base,
...storybook,
// ... other configs
]@vitest/eslint-plugin- Vitest testing framework rules
eslint-plugin-zod-x- Zod schema validation best practices
pnpm add -D eslint @valian/eslint-configor
npm install --save-dev eslint @valian/eslint-configThis package uses ESLint's new flat configuration system (ESLint v9+). Create an eslint.config.js file in your project root.
// eslint.config.mjs
import { defineConfig } from 'eslint/config'
import { base } from '@valian/eslint-config'
export default defineConfig([
...base,
{
// Your project-specific overrides here
rules: {
// Example: override a rule
'no-console': 'warn',
},
},
])// eslint.config.mjs
import { defineConfig } from 'eslint/config'
import { base } from '@valian/eslint-config'
import { importSort } from '@valian/eslint-config/import-sort'
import { json } from '@valian/eslint-config/json'
import { node } from '@valian/eslint-config/node'
export default defineConfig([
...base,
...importSort,
...node,
...json,
{
linterOptions: {
reportUnusedDisableDirectives: true,
},
},
])// eslint.config.mjs
import { base } from '@valian/eslint-config'
import { importSort } from '@valian/eslint-config/import-sort'
import { json } from '@valian/eslint-config/json'
import { react } from '@valian/eslint-config/react'
import { storybook } from '@valian/eslint-config/storybook'
import { typescript } from '@valian/eslint-config/typescript'
import { zod } from '@valian/eslint-config/zod'
import { defineConfig } from 'eslint/config'
export default defineConfig([
...base,
...typescript,
...importSort,
...react,
...json,
...storybook,
...zod,
{
files: ['**/*.{ts,tsx}'],
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
linterOptions: {
reportUnusedDisableDirectives: true,
},
},
])The package exports the following configurations:
config.base- Base ESLint rules and pluginsconfig.typescript- TypeScript-specific rulesconfig.importSort- Import sorting rulesconfig.noCycle- Circular dependency preventionconfig.jest- Jest testing rulesconfig.vitest- Vitest testing rules (alternative to Jest)config.react- React-specific rulesconfig.node- Node.js specific rulesconfig.json- JSON file linting rulesconfig.zod- Zod schema validation rules
For VS Code users, ensure your ESLint extension supports flat config. If you're using an older version of the ESLint extension, you may need to enable experimental flat config support in your VS Code settings:
{
"eslint.experimental.useFlatConfig": true
}