@saashub/qoq-eslint-v9-ts
Version:
Eslint flat config template for TS
99 lines (95 loc) • 3.52 kB
JavaScript
;
var qoqEslintV9Js = require('@saashub/qoq-eslint-v9-js');
var tools = require('@saashub/qoq-eslint-v9-js/tools');
var eslintImportResolverTypescript = require('eslint-import-resolver-typescript');
var importPlugin = require('eslint-plugin-import-x');
var merge = require('lodash/merge.js');
var tseslint = require('typescript-eslint');
const baseConfig = merge({}, tools.omitRules(qoqEslintV9Js.baseConfig, 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': [eslintImportResolverTypescript.createTypeScriptImportResolver(), importPlugin.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,
},
});
exports.baseConfig = baseConfig;
exports.testConfig = testConfig;