/** @type {import("eslint").Linter.Config} */ module.exports = { root: true, ignorePatterns: ["dist"], env: { browser: true, commonjs: true, es6: true, }, parserOptions: { ecmaVersion: "latest", sourceType: "module", ecmaFeatures: { jsx: true }, project: true, tsconfigRootDir: __dirname, }, extends: ["eslint:recommended", "plugin:prettier/recommended"], // Rules rules: { "linebreak-style": ["error", "unix"], "@typescript-eslint/no-unused-vars": [ "warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_", }, ], "@typescript-eslint/consistent-type-imports": [2, { fixStyle: "separate-type-imports" }], "@typescript-eslint/no-restricted-imports": [ 2, { paths: [ { name: "react-redux", importNames: ["useSelector", "useStore", "useDispatch"], message: "Please use pre-typed versions from `src/hooks/store.ts` instead.", }, ], }, ], "prettier/prettier": ["error"], }, overrides: [ // React { files: ["**/*.{js,jsx,ts,tsx}"], plugins: ["react", "jsx-a11y"], extends: [ "plugin:react/recommended", "plugin:react/jsx-runtime", "plugin:react-hooks/recommended", "plugin:jsx-a11y/recommended", ], settings: { react: { version: "detect" }, formComponents: ["Form"], linkComponents: [ { name: "Link", linkAttribute: "to" }, { name: "NavLink", linkAttribute: "to" }, ], "import/resolver": { typescript: {} }, }, }, // Typescript { files: ["**/*.{ts,tsx}"], plugins: ["@typescript-eslint", "import"], parser: "@typescript-eslint/parser", settings: { "import/internal-regex": "^~/", "import/resolver": { node: { extensions: [".ts", ".tsx"] }, typescript: { alwaysTryTypes: true, }, }, }, extends: [ "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-requiring-type-checking", "plugin:import/recommended", "plugin:import/typescript", ], }, // Node { files: [".eslintrc.{js,cjs}"], env: { node: true }, parserOptions: { sourceType: "script" }, }, ], };