UNPKG

@saashub/qoq-eslint-v9-ts

Version:
120 lines (116 loc) 4.72 kB
'use strict'; var qoqEslintV9Js = require('@saashub/qoq-eslint-v9-js'); var qoqUtils = require('@saashub/qoq-utils'); var eslintImportResolverTypescript = require('eslint-import-resolver-typescript'); var importPlugin = require('eslint-plugin-import-x'); var tseslint = require('typescript-eslint'); const { plugins: jsBaseConfigPlugins, ...jsBaseConfigRest } = qoqEslintV9Js.baseConfig; const baseConfig = { ...qoqUtils.objectMergeRight(jsBaseConfigRest, { rules: Object.keys(importPlugin.configs.recommended.rules).reduce((acc, key) => { acc[key] = undefined; return acc; }, {}), }, { name: '@saashub/qoq-eslint-v9-ts', languageOptions: { parser: tseslint.parser, parserOptions: { projectService: true, }, }, 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': 1, 'import-x/no-duplicates': 1, 'import-x/no-named-default': 1, ...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 'no-empty-function': 0, '@typescript-eslint/no-empty-function': 1, 'prefer-destructuring': 0, '@typescript-eslint/prefer-destructuring': 1, 'consistent-return': 0, '@typescript-eslint/consistent-return': 1, '@typescript-eslint/default-param-last': 1, '@typescript-eslint/member-ordering': 1, '@typescript-eslint/naming-convention': [ 1, { 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': 1, '@typescript-eslint/no-misused-promises': [1, { checksVoidReturn: false }], '@typescript-eslint/no-unused-vars': [1, { args: 'after-used' }], '@typescript-eslint/prefer-for-of': 1, '@typescript-eslint/prefer-includes': 1, '@typescript-eslint/prefer-nullish-coalescing': 1, // -> https://typescript-eslint.io/rules/prefer-nullish-coalescing/ '@typescript-eslint/prefer-optional-chain': 1, '@typescript-eslint/prefer-readonly': 1, '@typescript-eslint/prefer-string-starts-ends-with': 1, }, settings: { 'import-x/resolver-next': [eslintImportResolverTypescript.createTypeScriptImportResolver(), importPlugin.createNodeResolver()], }, }), plugins: { ...jsBaseConfigPlugins, '@typescript-eslint': tseslint.plugin, }, }; const testConfig = qoqUtils.objectMergeRight(baseConfig, { rules: { '@typescript-eslint/no-unsafe-argument': 0, '@typescript-eslint/no-unsafe-assignment': 0, '@typescript-eslint/no-unsafe-member-access': 0, 'sonarjs/no-duplicate-string': 0, }, }); exports.baseConfig = baseConfig; exports.testConfig = testConfig;