@modernpoacher/sprockets
Version:
213 lines (206 loc) • 3.79 kB
JavaScript
import globals from 'globals'
import standard from '@sequencemedia/eslint-config-standard/configs/recommended/merge'
import typescript from '@sequencemedia/eslint-config-typescript/configs/recommended/merge'
import babelParser from '@babel/eslint-parser'
import typescriptParser from '@typescript-eslint/parser'
import reactPlugin from 'eslint-plugin-react'
import storybookPlugin from 'eslint-plugin-storybook'
const reactParserOptions = {
ecmaFeatures: {
jsx: true
}
}
const reactPlugins = {
react: reactPlugin
}
const storybookPlugins = {
storybook: storybookPlugin
}
const reactRules = {
'no-unused-vars': [
'error',
{
varsIgnorePattern: 'React'
}
],
quotes: [
'error',
'single'
],
'jsx-quotes': [
'error',
'prefer-single'
],
'react/jsx-indent': [
'error',
2,
{
checkAttributes: true,
indentLogicalExpressions: true
}
]
}
const reactSettings = {
react: {
version: 'detect'
}
}
export default [
{
ignores: [
'coverage'
]
},
/**
* React config for all `jsx` files
*/
{
...reactPlugin.configs.flat.recommended,
settings: {
...reactSettings
}
},
/**
* Storybook config
*/ // @ts-ignore
...storybookPlugin.configs['flat/recommended'],
/**
* Standard config
*/
standard({
files: [
'**/*.{mjs,cjs,mts,cts}'
],
ignores: [
'src',
'stories',
'test',
'jest.*.mjs'
],
languageOptions: {
globals: {
...globals.node
}
}
}),
standard({
files: [
'src/**/*.{mjs,cjs,mts,cts}',
'stories/**/*.{mjs,cjs,mts,cts}'
],
languageOptions: {
globals: {
...globals.browser
}
}
}),
standard({
files: [
'test/**/*.{mjs,cjs,mts,cts}'
],
languageOptions: {
globals: {
...globals.mocha
}
}
}),
/**
* Standard config for all `jsx` files
*/
standard({
files: [
'src/**/*.jsx',
'stories/**/*.jsx'
],
ignores: [
'src/**/__tests__/**/*.jsx',
'stories/**/__tests__/**/*.jsx'
],
languageOptions: {
parser: babelParser,
parserOptions: {
...reactParserOptions,
project: null
},
globals: {
...globals.browser
}
}, // @ts-expect-error Storybook
plugins: {
...reactPlugins,
...storybookPlugins
}, // @ts-expect-error Storybook
rules: {
...reactRules
},
settings: {
...reactSettings
}
}),
standard({
files: [
'src/**/__tests__/**/*.jsx',
'stories/**/__tests__/**/*.jsx',
'jest.*.mjs'
],
languageOptions: {
parser: babelParser,
parserOptions: {
...reactParserOptions,
project: null
},
globals: {
...globals.browser,
...globals.jest
}
}, // @ts-expect-error Storybook
plugins: {
...reactPlugins,
...storybookPlugins
}, // @ts-expect-error Storybook
rules: {
...reactRules
},
settings: {
...reactSettings
}
}),
/**
* TypeScript config
*/
typescript({
files: [
'**/*.{mts,cts}'
],
ignores: [
'src',
'test'
],
languageOptions: {
parser: typescriptParser,
parserOptions: {
projectService: true
},
globals: {
...globals.node,
SprocketsTypes: 'readonly'
}
}
}),
typescript({
files: [
'src/**/*.{mts,cts}',
'test/**/*.{mts,cts}'
],
languageOptions: {
parser: typescriptParser,
parserOptions: {
projectService: true
},
globals: {
...globals.browser,
SprocketsTypes: 'readonly'
}
}
})
]