Merge branch 'master' of github.com:poolifier/poolifier
[poolifier.git] / eslint.config.js
index 8a100a1a51fce7e7377972a62362ed32f6a6e5fc..517ded5d66352a4a4eedd25072fc88b6efd824b8 100644 (file)
@@ -2,12 +2,9 @@ import cspellConfigs from '@cspell/eslint-plugin/configs'
 import js from '@eslint/js'
 import { defineFlatConfig } from 'eslint-define-config'
 import jsdoc from 'eslint-plugin-jsdoc'
-import nodePlugin from 'eslint-plugin-n'
 import simpleImportSort from 'eslint-plugin-simple-import-sort'
 import globals from 'globals'
-import neostandard from 'neostandard'
-// eslint-disable-next-line n/no-extraneous-import
-import tseslint from 'typescript-eslint'
+import neostandard, { plugins } from 'neostandard'
 
 export default defineFlatConfig([
   {
@@ -15,27 +12,38 @@ export default defineFlatConfig([
   },
   cspellConfigs.recommended,
   js.configs.recommended,
-  ...nodePlugin.configs['flat/mixed-esm-and-cjs'],
+  plugins.promise.configs['flat/recommended'],
+  ...plugins.n.configs['flat/mixed-esm-and-cjs'],
   jsdoc.configs['flat/recommended-typescript'],
-  ...tseslint.config(
-    ...tseslint.configs.strictTypeChecked,
-    ...tseslint.configs.stylisticTypeChecked
-  ),
-  ...neostandard({
-    ts: true,
-    globals: {
-      ...globals.node,
-      ...globals.mocha,
-    },
-  }),
   {
-    languageOptions: {
-      parserOptions: {
-        project: true,
-        tsconfigRootDir: import.meta.dirname,
-      },
+    rules: {
+      'jsdoc/check-tag-names': [
+        'warn',
+        {
+          typed: true,
+          definedTags: ['defaultValue', 'experimental', 'typeParam'],
+        },
+      ],
     },
   },
+  ...plugins['typescript-eslint'].config(
+    {
+      extends: [
+        ...plugins['typescript-eslint'].configs.strictTypeChecked,
+        ...plugins['typescript-eslint'].configs.stylisticTypeChecked,
+      ],
+      languageOptions: {
+        parserOptions: {
+          projectService: true,
+          tsconfigRootDir: import.meta.dirname,
+        },
+      },
+    },
+    {
+      files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
+      ...plugins['typescript-eslint'].configs.disableTypeChecked,
+    }
+  ),
   {
     plugins: {
       'simple-import-sort': simpleImportSort,
@@ -54,7 +62,6 @@ export default defineFlatConfig([
               'Quadflieg',
               'neostandard',
               'poolifier',
-              'tseslint',
             ],
           },
         },
@@ -63,6 +70,12 @@ export default defineFlatConfig([
       'simple-import-sort/exports': 'error',
     },
   },
+  ...neostandard({
+    ts: true,
+    globals: {
+      ...globals.mocha,
+    },
+  }),
   {
     files: [
       'src/pools/selection-strategies/fair-share-worker-choice-strategy.ts',
@@ -71,17 +84,21 @@ export default defineFlatConfig([
       '@stylistic/operator-linebreak': 'off',
     },
   },
+  // examples specific configuration
   {
-    files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
-    ...tseslint.configs.disableTypeChecked,
+    files: ['examples/**/*.ts'],
+    rules: {
+      '@typescript-eslint/no-unsafe-argument': 'off',
+      '@typescript-eslint/no-unsafe-call': 'off',
+      '@typescript-eslint/no-unsafe-return': 'off',
+      '@typescript-eslint/no-unsafe-assignment': 'off',
+      '@typescript-eslint/no-unsafe-member-access': 'off',
+      '@typescript-eslint/no-unnecessary-type-assertion': 'off',
+      '@typescript-eslint/no-redundant-type-constituents': 'off',
+      '@typescript-eslint/return-await': 'off',
+      '@typescript-eslint/restrict-template-expressions': 'off',
+    },
   },
-  // examples specific configuration
-  // {
-  //   files: ['examples/**/*.ts'],
-  //   rules: {
-  //     'no-undef': 'off',
-  //   },
-  // },
   {
     files: ['examples/**/*.js', 'examples/**/*.cjs'],
     rules: {