UNPKG

@modernpoacher/sprockets

Version:
213 lines (206 loc) 3.79 kB
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' } } }) ]