Files
discord.js/eslint.config.js
2023-08-22 09:40:11 +02:00

98 lines
2.9 KiB
JavaScript

import unocss from '@unocss/eslint-plugin';
import common from 'eslint-config-neon/flat/common.js';
import edge from 'eslint-config-neon/flat/edge.js';
import next from 'eslint-config-neon/flat/next.js';
import node from 'eslint-config-neon/flat/node.js';
import prettier from 'eslint-config-neon/flat/prettier.js';
import react from 'eslint-config-neon/flat/react.js';
import typescript from 'eslint-config-neon/flat/typescript.js';
import deepMerge from 'ts-deepmerge';
const generalRuleset = Object.freeze(
deepMerge.withOptions({ mergeArrays: false }, ...common, ...node, ...typescript, {
files: [
'{apps,packages}/**/src/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'{apps,packages}/**/bin/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'{apps,packages}/**/__tests__/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.eslint.json', './apps/*/tsconfig.eslint.json', './packages/*/tsconfig.eslint.json'],
},
},
rules: {
'@typescript-eslint/consistent-type-definitions': [2, 'interface'],
'jsdoc/no-undefined-types': 1,
},
}),
);
const reactRuleset = Object.freeze(
deepMerge.withOptions({ mergeArrays: false }, generalRuleset, ...react, ...next, ...edge, {
files: [
'apps/**/src/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'apps/**/bin/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'apps/**/__tests__/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'packages/ui/src/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
],
plugins: {
'@unocss': unocss,
},
rules: {
'@next/next/no-html-link-for-pages': 0,
'react/react-in-jsx-scope': 0,
'react/jsx-filename-extension': [1, { extensions: ['.tsx'] }],
},
settings: {
react: {
version: 'detect',
},
},
}),
);
const prettierRuleset = Object.freeze(
deepMerge.withOptions({ mergeArrays: false }, ...prettier, {
files: [
'{apps,packages}/**/src/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'{apps,packages}/**/bin/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'{apps,packages}/**/__tests__/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
],
}),
);
/** @type {import('eslint').Linter.FlatConfig[]} */
export default [
{
ignores: ['**/.next', '**/coverage', '**/dist', '**/node_modules', '**/.contentlayer', '**/template'],
},
generalRuleset,
reactRuleset,
{
files: [
'packages/rest/src/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'packages/rest/__tests__/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
],
rules: {
'n/prefer-global/url': 0,
'n/prefer-global/url-search-params': 0,
'n/prefer-global/buffer': 0,
'n/prefer-global/process': 0,
'no-restricted-globals': 0,
'unicorn/prefer-node-protocol': 0,
},
},
{
files: [
'packages/voice/src/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'packages/voice/__tests__/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
'packages/voice/__mocks__/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}',
],
rules: {
'import/extensions': 0,
'no-restricted-globals': 0,
},
},
prettierRuleset,
];