mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-04-24 21:06:09 +02:00
93 lines
3.6 KiB
JavaScript
93 lines
3.6 KiB
JavaScript
import { FlatCompat } from "@eslint/eslintrc";
|
|
import eslint from "@eslint/js";
|
|
import tseslint from "typescript-eslint";
|
|
|
|
const compat = new FlatCompat({
|
|
baseDirectory: import.meta.dirname,
|
|
});
|
|
|
|
const eslintConfig = tseslint.config(
|
|
eslint.configs.recommended,
|
|
tseslint.configs.strictTypeChecked,
|
|
tseslint.configs.stylisticTypeChecked,
|
|
...compat.extends("next/core-web-vitals"),
|
|
{
|
|
// Disabled rules taken from https://biomejs.dev/linter/rules-sources for ones that
|
|
// are already handled by Prettier and TypeScript or are not needed
|
|
rules: {
|
|
// eslint-plugin-jsx-a11y rules - some disabled for performance/specific project needs
|
|
"jsx-a11y/alt-text": "off",
|
|
"jsx-a11y/anchor-has-content": "off",
|
|
"jsx-a11y/anchor-is-valid": "off",
|
|
"jsx-a11y/aria-activedescendant-has-tabindex": "off",
|
|
"jsx-a11y/aria-props": "off",
|
|
"jsx-a11y/aria-proptypes": "off",
|
|
"jsx-a11y/aria-role": "off",
|
|
"jsx-a11y/aria-unsupported-elements": "off",
|
|
"jsx-a11y/autocomplete-valid": "off",
|
|
"jsx-a11y/click-events-have-key-events": "off",
|
|
"jsx-a11y/heading-has-content": "off",
|
|
"jsx-a11y/html-has-lang": "off",
|
|
"jsx-a11y/iframe-has-title": "off",
|
|
"jsx-a11y/img-redundant-alt": "off",
|
|
"jsx-a11y/interactive-supports-focus": "off",
|
|
"jsx-a11y/label-has-associated-control": "off",
|
|
"jsx-a11y/lang": "off",
|
|
"jsx-a11y/media-has-caption": "off",
|
|
"jsx-a11y/mouse-events-have-key-events": "off",
|
|
"jsx-a11y/no-access-key": "off",
|
|
"jsx-a11y/no-aria-hidden-on-focusable": "off",
|
|
"jsx-a11y/no-autofocus": "off",
|
|
"jsx-a11y/no-distracting-elements": "off",
|
|
"jsx-a11y/no-interactive-element-to-noninteractive-role": "off",
|
|
"jsx-a11y/no-noninteractive-element-to-interactive-role": "off",
|
|
"jsx-a11y/no-noninteractive-tabindex": "off",
|
|
"jsx-a11y/no-redundant-roles": "off",
|
|
"jsx-a11y/no-static-element-interactions": "off",
|
|
"jsx-a11y/prefer-tag-over-role": "off",
|
|
"jsx-a11y/role-has-required-aria-props": "off",
|
|
"jsx-a11y/role-supports-aria-props": "off",
|
|
"jsx-a11y/scope": "off",
|
|
"jsx-a11y/tabindex-no-positive": "off",
|
|
// eslint-plugin-react rules - some disabled for performance/specific project needs
|
|
"react/button-has-type": "off",
|
|
"react/jsx-boolean-value": "off",
|
|
"react/jsx-curly-brace-presence": "off",
|
|
"react/jsx-fragments": "off",
|
|
"react/jsx-key": "off",
|
|
"react/jsx-no-comment-textnodes": "off",
|
|
"react/jsx-no-duplicate-props": "off",
|
|
"react/jsx-no-target-blank": "off",
|
|
"react/jsx-no-useless-fragment": "off",
|
|
"react/no-array-index-key": "off",
|
|
"react/no-children-prop": "off",
|
|
"react/no-danger": "off",
|
|
"react/no-danger-with-children": "off",
|
|
"react/void-dom-elements-no-children": "off",
|
|
// eslint-plugin-react-hooks rules - disabled for specific project needs
|
|
"react-hooks/exhaustive-deps": "off",
|
|
"react-hooks/rules-of-hooks": "off",
|
|
// typescript-eslint rules - some handled by TypeScript compiler or disabled for project needs
|
|
"@typescript-eslint/no-explicit-any": "off",
|
|
"@typescript-eslint/require-await": "off",
|
|
// Custom rules
|
|
"@typescript-eslint/restrict-template-expressions": [
|
|
"error",
|
|
{
|
|
allowNumber: true,
|
|
allowBoolean: true,
|
|
allowNever: true,
|
|
},
|
|
],
|
|
},
|
|
languageOptions: {
|
|
parserOptions: {
|
|
projectService: true,
|
|
tsconfigRootDir: import.meta.dirname,
|
|
},
|
|
},
|
|
}
|
|
);
|
|
|
|
export default eslintConfig;
|