taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

eslint.config.mjs (3032B)


      1 // This file has been placed into the public domain.
      2 
      3 import { createRequire } from "node:module";
      4 const require = createRequire(import.meta.url);
      5 
      6 import { dirname, join } from "node:path";
      7 import { fileURLToPath } from "node:url";
      8 
      9 const __dirname = dirname(fileURLToPath(import.meta.url));
     10 
     11 const resolve = (pkg) => {
     12   const qaToolingDir = join(__dirname, "packages/qa-tooling");
     13   try {
     14     return require.resolve(pkg, { paths: [qaToolingDir] });
     15   } catch {
     16     return pkg;
     17   }
     18 };
     19 
     20 const eslint = require(resolve("@eslint/js"));
     21 const tseslint = require(resolve("typescript-eslint"));
     22 const reactPlugin = require(resolve("eslint-plugin-react"));
     23 const reactHooksPlugin = require(resolve("eslint-plugin-react-hooks"));
     24 const importPlugin = require(resolve("eslint-plugin-import"));
     25 const jsxA11yPlugin = require(resolve("eslint-plugin-jsx-a11y"));
     26 const headerPlugin = require(resolve("eslint-plugin-header"));
     27 const prettierConfig = require(resolve("eslint-config-prettier"));
     28 const globals = require(resolve("globals"));
     29 
     30 export default tseslint.config(
     31   {
     32     ignores: [
     33       "prebuilt/**",
     34       "**/dist/**",
     35       "**/lib/**",
     36       "**/node_modules/**",
     37       "**/vendor/**",
     38       "**/tsconfig.tsbuildinfo",
     39       "**/.eslintrc.js",
     40       "**/.eslintrc.cjs",
     41     ],
     42   },
     43   eslint.configs.recommended,
     44   ...tseslint.configs.recommended,
     45   {
     46     files: ["**/*.{ts,tsx,js,jsx}"],
     47     plugins: {
     48       react: reactPlugin,
     49       "react-hooks": reactHooksPlugin,
     50       "jsx-a11y": jsxA11yPlugin,
     51       import: importPlugin,
     52       header: headerPlugin,
     53     },
     54     languageOptions: {
     55       globals: {
     56         ...globals.browser,
     57         ...globals.node,
     58         ...globals.es2021,
     59       },
     60       parserOptions: {
     61         ecmaVersion: "latest",
     62         sourceType: "module",
     63         ecmaFeatures: {
     64           jsx: true,
     65         },
     66       },
     67     },
     68     settings: {
     69       react: {
     70         version: "18.0",
     71         pragma: "h",
     72       },
     73     },
     74     rules: {
     75       ...reactPlugin.configs.recommended.rules,
     76       ...reactHooksPlugin.configs.recommended.rules,
     77       ...jsxA11yPlugin.configs.recommended.rules,
     78       "no-constant-condition": ["error", { checkLoops: false }],
     79       "prefer-const": ["warn", { destructuring: "all" }],
     80       "no-prototype-builtins": "off",
     81       "@typescript-eslint/no-namespace": "off",
     82       "@typescript-eslint/no-explicit-any": "off",
     83       "@typescript-eslint/ban-ts-comment": "off",
     84       "@typescript-eslint/no-unused-vars": ["warn", { args: "none" }],
     85       "@typescript-eslint/explicit-function-return-type": [
     86         "warn",
     87         { allowExpressions: true },
     88       ],
     89       "@typescript-eslint/no-use-before-define": [
     90         "error",
     91         { functions: false, classes: false },
     92       ],
     93       "import/extensions": ["error", "ignorePackages"],
     94       "react/no-unknown-property": 0,
     95       "react/prop-types": 0,
     96       "react/no-unescaped-entities": 0,
     97     },
     98   },
     99   {
    100     files: ["**/*.js", "**/*.mjs", "**/*.cjs"],
    101     ...tseslint.configs.disableTypeChecked,
    102   },
    103   prettierConfig,
    104 );