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([
{
},
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),
- ...tseslint.config(...tseslint.configs.strict, ...tseslint.configs.stylistic),
- ...neostandard({
- ts: true,
- globals: {
- ...globals.node,
- ...globals.mocha,
+ {
+ 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,
},
rules: {
+ '@cspell/spellchecker': [
+ 'warn',
+ {
+ autoFix: true,
+ cspell: {
+ words: [
+ 'Alessandro',
+ 'Ardizio',
+ 'Benoit',
+ 'IWRR',
+ 'Quadflieg',
+ 'neostandard',
+ 'poolifier',
+ ],
+ },
+ },
+ ],
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
},
},
+ ...neostandard({
+ ts: true,
+ globals: {
+ ...globals.mocha,
+ },
+ }),
{
files: [
'src/pools/selection-strategies/fair-share-worker-choice-strategy.ts',
'@stylistic/operator-linebreak': 'off',
},
},
+ // examples specific configuration
+ {
+ 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',
+ },
+ },
{
files: ['examples/**/*.js', 'examples/**/*.cjs'],
rules: {
- 'no-undef': 'off',
'n/no-missing-import': [
'error',
{
'@typescript-eslint/no-require-imports': 'off',
},
},
+ // benchmarks specific configuration
{
files: ['benchmarks/**/*.cjs'],
rules: {
'@typescript-eslint/no-require-imports': 'off',
},
},
+ // tests specific configuration
{
files: ['tests/**/*.js', 'tests/**/*.mjs', 'tests/**/*.cjs'],
rules: {