@saashub/qoq-eslint-v9-ts
Version:
Eslint flat config template for TS
96 lines (93 loc) • 3.45 kB
JavaScript
import { baseConfig as baseConfig$1 } from '@saashub/qoq-eslint-v9-js';
import { omitRules } from '@saashub/qoq-eslint-v9-js/tools';
import { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';
import importPlugin, { createNodeResolver } from 'eslint-plugin-import-x';
import merge from 'lodash/merge.js';
import tseslint from 'typescript-eslint';
const baseConfig = merge({}, omitRules(baseConfig$1, Object.keys(importPlugin.configs.recommended.rules)), {
name: '@saashub/qoq-eslint-v9-ts',
languageOptions: {
parser: tseslint.parser,
parserOptions: {
projectService: true,
},
},
plugins: {
'@typescript-eslint': tseslint.plugin,
},
rules: {
'no-undef': 0, // from plugin page: "It is safe to disable this rule when using TypeScript because TypeScript's compiler enforces this check
...importPlugin.configs.typescript.rules,
'import-x/no-cycle': 'warn',
'import-x/no-duplicates': 'warn',
'import-x/no-named-default': 'warn',
...tseslint.plugin.configs
.recommended.rules,
...tseslint.plugin.configs['recommended-requiring-type-checking'].rules,
'@typescript-eslint/no-unsafe-assignment': 0, // strange rule, turned off for now
'@typescript-eslint/naming-convention': [
'warn',
{
selector: 'interface',
prefix: ['I'],
format: ['PascalCase'],
},
{
selector: 'typeAlias',
prefix: ['T'],
format: ['PascalCase'],
},
{
selector: 'enum',
prefix: ['E'],
format: ['PascalCase'],
},
{
selector: 'enumMember',
format: ['UPPER_CASE'],
},
{
selector: 'class',
format: ['PascalCase'],
},
{
selector: ['classProperty', 'classMethod', 'method', 'function'],
format: ['camelCase'],
},
{
selector: ['classProperty'],
modifiers: ['static'],
format: ['UPPER_CASE'],
},
{
selector: 'parameter',
leadingUnderscore: 'allow',
format: ['camelCase'],
filter: {
regex: '(_{1}|_{2})',
match: false,
},
},
{
selector: 'variable',
format: ['camelCase', 'PascalCase', 'UPPER_CASE'],
},
],
'@typescript-eslint/explicit-module-boundary-types': 'warn',
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-misused-promises': ['warn', { checksVoidReturn: false }],
'@typescript-eslint/no-unused-vars': ['warn', { args: 'after-used' }],
'@typescript-eslint/require-await': 'warn',
},
settings: {
'import-x/resolver-next': [createTypeScriptImportResolver(), createNodeResolver()],
},
});
const testConfig = merge({}, baseConfig, {
rules: {
'@typescript-eslint/no-unsafe-argument': 0,
'@typescript-eslint/no-unsafe-assignment': 0,
'@typescript-eslint/no-unsafe-member-access': 0,
},
});
export { baseConfig, testConfig };