chore: add new eslint setup

This commit is contained in:
William Oldham 2025-01-16 13:03:01 +00:00
parent bb45491c7e
commit 47d799b339
5 changed files with 2272 additions and 584 deletions

View File

@ -1,2 +0,0 @@
dist
*.js

View File

@ -1,59 +0,0 @@
{
"env": {
"node": true,
"commonjs": true,
"es6": true
},
"parser": "@typescript-eslint/parser",
"globals": {
"BigInt": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"plugins": [
"@typescript-eslint"
],
"rules": {
"require-atomic-updates": "warn",
"no-case-declarations": "off",
"no-empty": "off",
"no-console": "off",
"linebreak-style": "off",
"no-global-assign": "off",
"prefer-const": "error",
"no-var": "error",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
"no-extra-semi": "off",
"@typescript-eslint/no-extra-semi": "error",
"@typescript-eslint/no-empty-interface": "warn",
"@typescript-eslint/no-inferrable-types": "error",
"@typescript-eslint/typedef": "error",
"@typescript-eslint/explicit-function-return-type": "error",
"keyword-spacing": "off",
"@typescript-eslint/keyword-spacing": "error",
"curly": "error",
"brace-style": "error",
"one-var": [
"error",
"never"
],
"indent": [
"error",
"tab",
{
"SwitchCase": 1
}
],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
]
}
}

103
eslint.config.mjs Normal file
View File

@ -0,0 +1,103 @@
/* eslint-disable import/no-unresolved -- We don't care about resolving imports in here */
import eslint from '@eslint/js';
import eslintCommentPlugin from '@eslint-community/eslint-plugin-eslint-comments/configs';
import stylisticPlugin from '@stylistic/eslint-plugin';
import importPlugin from 'eslint-plugin-import';
import tseslint from 'typescript-eslint';
const stylisticConfig = stylisticPlugin.configs.customize({
indent: 'tab',
quotes: 'single',
semi: true,
commaDangle: 'never',
braceStyle: '1tbs'
});
export default tseslint.config(
{
// https://eslint.org/docs/rules/
extends: [eslint.configs.recommended],
rules: {
'require-atomic-updates': 'off', // This rule is widely controversial and causes false positives
'no-console': 'off',
'prefer-const': 'error',
'no-var': 'error',
'no-unused-vars': [
'error',
{ argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^ignore' }
],
'one-var': ['error', 'never']
}
},
{
// https://typescript-eslint.io/rules/
extends: [tseslint.configs.recommended],
files: ['**/*.ts', '**/*.d.ts'],
rules: {
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^ignore' }
],
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/explicit-function-return-type': 'error',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-empty-object-type': ['off'],
'@typescript-eslint/no-import-type-side-effects': 'error',
'@typescript-eslint/consistent-type-imports': ['error', {
fixStyle: 'separate-type-imports'
}]
}
},
{
// https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/
extends: [eslintCommentPlugin.recommended],
rules: {
'@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }],
'@eslint-community/eslint-comments/require-description': 'error'
}
},
{
// https://eslint.style/rules
extends: [stylisticConfig],
rules: {
'@stylistic/no-extra-semi': 'error',
'@stylistic/yield-star-spacing': ['error', 'after'],
'@stylistic/operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before' } }],
'@stylistic/curly-newline': ['error', {
multiline: true,
consistent: true
}],
'@stylistic/object-curly-newline': ['error', {
multiline: true,
consistent: true
}]
}
},
{
// https://www.npmjs.com/package/eslint-plugin-import
extends: [importPlugin.flatConfigs.recommended, importPlugin.flatConfigs.warnings],
rules: {
'import/order': ['warn', {
'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
'newlines-between': 'never'
}],
'import/first': 'error',
'import/consistent-type-specifier-style': ['error', 'prefer-top-level']
}
},
{
// https://www.npmjs.com/package/eslint-plugin-import - but specifically for TypeScript
extends: [importPlugin.flatConfigs.typescript],
files: ['**/*.ts', '**/*.d.ts'],
settings: {
'import/resolver': {
typescript: {
alwaysTryTypes: true,
project: './tsconfig.json'
},
node: true
}
}
}
);

2682
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -50,6 +50,8 @@
"zod": "^3.21.4"
},
"devDependencies": {
"@eslint-community/eslint-plugin-eslint-comments": "^4.4.1",
"@stylistic/eslint-plugin": "^2.13.0",
"@types/bmp-js": "^0.1.2",
"@types/express": "^4.17.17",
"@types/fs-extra": "^11.0.1",
@ -59,10 +61,11 @@
"@types/node-rsa": "^1.1.1",
"@types/pako": "^2.0.0",
"@types/pngjs": "^6.0.1",
"@typescript-eslint/eslint-plugin": "^5.59.0",
"@typescript-eslint/parser": "^5.59.0",
"@typescript-eslint/parser": "^8.20.0",
"axios": "^1.3.6",
"eslint": "^8.38.0",
"eslint": "^9.18.0",
"eslint-import-resolver-typescript": "^3.7.0",
"eslint-plugin-import": "^2.31.0",
"newman": "^6.0.0",
"ora": "^5.4.1",
"postman-collection": "^4.1.7",
@ -70,6 +73,7 @@
"ts-unused-exports": "^9.0.4",
"tsc-alias": "^1.8.5",
"typescript": "^5.0.4",
"typescript-eslint": "^8.20.0",
"xmlbuilder2": "^3.1.0"
}
}