8666f4c4a02ac7287b1a85bf448d62f9848d8cda
[poolifier.git] / eslint.config.js
1 import cspellConfigs from '@cspell/eslint-plugin/configs'
2 import js from '@eslint/js'
3 import { defineFlatConfig } from 'eslint-define-config'
4 import jsdoc from 'eslint-plugin-jsdoc'
5 import nodePlugin from 'eslint-plugin-n'
6 import simpleImportSort from 'eslint-plugin-simple-import-sort'
7 import globals from 'globals'
8 import neostandard from 'neostandard'
9 // eslint-disable-next-line n/no-extraneous-import
10 import tseslint from 'typescript-eslint'
11
12 export default defineFlatConfig([
13 {
14 ignores: ['docs/**', '**/dist/**', 'lib/**', 'outputs/**'],
15 },
16 cspellConfigs.recommended,
17 js.configs.recommended,
18 ...nodePlugin.configs['flat/mixed-esm-and-cjs'],
19 jsdoc.configs['flat/recommended-typescript'],
20 // ...tseslint.config(...tseslint.configs.strictTypeChecked, ...tseslint.configs.stylisticTypeChecked),
21 ...tseslint.config(...tseslint.configs.strict, ...tseslint.configs.stylistic),
22 ...neostandard({
23 ts: true,
24 globals: {
25 ...globals.node,
26 ...globals.mocha,
27 },
28 }),
29 {
30 plugins: {
31 'simple-import-sort': simpleImportSort,
32 },
33 rules: {
34 '@cspell/spellchecker': [
35 'warn',
36 {
37 autoFix: true,
38 cspell: {
39 words: [
40 'Alessandro',
41 'Ardizio',
42 'Benoit',
43 'IWRR',
44 'Quadflieg',
45 'neostandard',
46 'poolifier',
47 'tseslint',
48 ],
49 },
50 },
51 ],
52 'simple-import-sort/imports': 'error',
53 'simple-import-sort/exports': 'error',
54 },
55 },
56 {
57 files: [
58 'src/pools/selection-strategies/fair-share-worker-choice-strategy.ts',
59 ],
60 rules: {
61 '@stylistic/operator-linebreak': 'off',
62 },
63 },
64 {
65 files: ['examples/**/*.ts'],
66 rules: {
67 'no-undef': 'off',
68 },
69 },
70 {
71 files: ['examples/**/*.js', 'examples/**/*.cjs'],
72 rules: {
73 'n/no-missing-import': [
74 'error',
75 {
76 allowModules: ['ws'],
77 },
78 ],
79 '@typescript-eslint/no-require-imports': 'off',
80 },
81 },
82 {
83 files: ['benchmarks/**/*.cjs'],
84 rules: {
85 '@typescript-eslint/no-require-imports': 'off',
86 },
87 },
88 {
89 files: ['tests/**/*.js', 'tests/**/*.mjs', 'tests/**/*.cjs'],
90 rules: {
91 '@typescript-eslint/no-require-imports': 'off',
92 '@typescript-eslint/no-empty-function': 'off',
93 },
94 },
95 ])