Ctrl K
ComunidadGuías…

eslint.config.js

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import js from '@eslint/js';
import { defineConfig, globalIgnores } from 'eslint/config';
import { configs, plugins, rules } from 'eslint-config-airbnb-extended';
import prettierPlugin from 'eslint-plugin-prettier/recommended';
import pluginPromise from 'eslint-plugin-promise';
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import tseslint from 'typescript-eslint';

const jsConfig = defineConfig([
  // ESLint Recommended Rules
  {
    name: 'js/config',
    ...js.configs.recommended,
  },
  // Stylistic Plugin
  plugins.stylistic,
  // Import X Plugin
  plugins.importX,
  // Airbnb Base Recommended Config
  ...configs.base.recommended,
  // Strict Import Config
  rules.base.importsStrict,

  pluginPromise.configs['flat/recommended'],
  {
    name: 'promise/flat/all',
    rules: {
      'promise/prefer-await-to-callbacks': 'error',
      'promise/prefer-await-to-then': 'error',
      'promise/prefer-catch': 'error',
    },
  },
]);

const nodeConfig = [
  // Node Plugin
  plugins.node,
  // Airbnb Node Recommended Config
  ...configs.node.recommended,
];

const typescriptConfig = [
  // TypeScript ESLint Plugin
  plugins.typescriptEslint,
  // Airbnb Base TypeScript Config
  ...configs.base.typescript,
  rules.typescript.typescriptEslintStrict,
  ...tseslint.configs.strictTypeChecked,
  ...tseslint.configs.stylisticTypeChecked,
  {
    name: 'typescript/disable',
    files: ['**/*.*js'],
    extends: [tseslint.configs.disableTypeChecked],
  },
];

export default defineConfig([
  globalIgnores(['**/dist', '**/node_modules', '!**/.*.*js', 'docs/**/*', 'config/**/*']),
  // Javascript Config
  ...jsConfig,
  // Node Config
  ...nodeConfig,
  // TypeScript Config
  ...typescriptConfig,
  // Unicorn
  eslintPluginUnicorn.configs.recommended,

  {
    name: 'project/overrides',
    rules: {
      'import-x/prefer-default-export': 0, // default export is dumb
      'import-x/extensions': ['error', 'ignorePackages', { ts: 'always' }], // Node native TS support
      'import-x/no-useless-path-segments': ['error', { noUselessIndex: false }], // Allow indexes
      'unicorn/prefer-ternary': ['error', 'only-single-line'], // Hard to read
      'unicorn/prefer-switch': 'off', // Too wordy
      'unicorn/prevent-abbreviations': 'off', // Unrealistic
      'no-restricted-syntax': ['error', 'ForInStatement', 'LabeledStatement', 'WithStatement'], // Remove Airbnb's ban on for..of
    },
  },
  // Prettier Config
  prettierPlugin,
]);