0.8.3 • Published 6 months ago

@effective/eslint-cfg v0.8.3

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
6 months ago

ESLint Config Builder

Sponsored by License Version Build Downloads

A TypeScript-based library for generating ESLint configurations in the Flat Config format, targeting TypeScript projects with optional NodeJS and React support.

Features

  • Generates ESLint Flat Configs for ESLint v9.
  • Requires TypeScript and optionally supports React and NodeJS
  • Automatically drops rules handled by Prettier.
  • Uses Biome data to optionally disable rules supported by Biome.

Config options

  • strict: Enables strict linting rules (TypeScript mostly)
  • style: Adds additional rules for style guidelines and import sorting/grouping.
  • fast: Drop rules which require typing information (much faster)
  • biome: Drop rules which are implemented identically in Biome (for performance reasons)
  • disabled: Only return disabled rules. Helpful to add to the end when using custom rules.
  • react: Add all recommended ReactJS/Hooks/Storybook checks
  • node: Add all recommended NodeJS checks

Installation

npm install @effective/eslint-cfg

Usage

// eslint.config.ts
import { getConfig } from "@effective/eslint-cfg"

const config = getConfig({
  react: true,
  strict: true,
  style: true
})

export default [
  {
    ignores: ["node_modules", "dist"]
  },
  {
    settings: {
      react: {
        version: "19.0"
      }
    }
  },
  {
    files: ["**/*.ts", "**/*.tsx"]
  },
  {
    rules: {
      // custom rules / overrides
    }
  }
]

Note: Using TS configuration files work perfectly fine since ESLint v9 but requires installing jiti.

API

The package exports the following functions:

getConfig(options)

Loads an ESLint configuration based on the provided options.

  • options - The configuration options
  • Returns: Promise resolving to the loaded ESLint configuration
import { getConfig } from "@effective/eslint-cfg"

const options = {
  react: true,
  strict: true,
  style: true
}

const config = await getConfig(options)
console.log(config.rules) // Access the ESLint rules

setRuleSeverity(config, ruleName, severity)

Changes the severity of a specific ESLint rule in the configuration.

  • config - The ESLint configuration
  • ruleName - The name of the rule to modify
  • severity - The new severity level ("error" | "warn" | "off")
  • Throws: When the config has no rules or the rule is not configured
import { getConfig, setRuleSeverity } from "@effective/eslint-cfg"

const config = await getConfig(options)
// Change 'no-console' rule to warning
setRuleSeverity(config, "no-console", "warn")

configureRule(config, ruleName, options)

Configures a specific ESLint rule in the configuration with its severity and optional parameters. Unlike setRuleSeverity, this method preserves the existing severity level while allowing to update the rule's options.

  • config - The ESLint configuration
  • ruleName - The name of the rule to configure
  • options - Optional array of configuration options for the rule
  • Throws: When the config has no rules or the rule is not configured
import { getConfig, configureRule } from "@effective/eslint-cfg"

const config = await getConfig(options)
// Configure 'max-len' rule with options while preserving severity
configureRule(config, "max-len", [{ code: 100, tabWidth: 2 }])

disableRule(config, ruleName)

Disables a specific ESLint rule in the configuration by removing it.

  • config - The ESLint configuration
  • ruleName - The name of the rule to disable
  • Throws: When the config has no rules or the rule is not configured
import { getConfig, disableRule } from "@effective/eslint-cfg"

const config = await getConfig(options)
// Completely remove the 'no-console' rule
disableRule(config, "no-console")

addRule(config, ruleName, severity, options)

Adds a new ESLint rule to the configuration with specified severity and options.

  • config - The ESLint configuration
  • ruleName - The name of the rule to add
  • severity - The severity level for the rule ("warn" | "error")
  • options - Additional options for the rule configuration
  • Throws: When the config has no rules or the rule is already configured
import { getConfig, addRule } from "@effective/eslint-cfg"

const config = await getConfig(options)
// Add new rule with options
addRule(config, "max-len", "error", [{ code: 100 }])

disableAllRulesBut(config, ruleName)

Disables all rules except the one specified. Useful for focusing on a single rule for debugging.

  • config - The ESLint configuration
  • ruleName - The name of the rule to add
  • Throws: When the config has no rules or the rule is already configured

Complete Example

import {
  getConfig,
  setRuleSeverity,
  disableRule,
  addRule
} from "@effective/eslint-cfg"

async function customizeEslintConfig() {
  // Load the base configuration
  const config = await getConfig({
    react: true,
    strict: true,
    style: true
  })

  // Customize rule severities
  setRuleSeverity(config, "no-console", "warn")
  setRuleSeverity(config, "no-unused-vars", "error")

  // Disable rules you don't want
  disableRule(config, "complexity")

  // Add new rule with options
  addRule(config, "max-len", "error", [{ code: 100 }])

  return config
}

Developer

Build

pnpm run build

License

Apache License; Version 2.0, January 2004

Copyright

Copyright 2024-2025Sebastian Software GmbH

0.8.3

6 months ago

0.8.2

6 months ago

0.8.1

6 months ago

0.8.0

6 months ago

0.7.7

7 months ago

0.7.6

7 months ago

0.7.5

7 months ago

0.7.4

7 months ago

0.7.3

7 months ago

0.7.2

7 months ago

0.7.1

7 months ago

0.7.0

7 months ago

0.6.1

8 months ago

0.6.0

8 months ago

0.5.1

8 months ago

0.5.0

9 months ago

0.4.8

10 months ago

0.4.7

10 months ago

0.4.6

10 months ago

0.4.5

10 months ago

0.4.4

10 months ago

0.4.3

10 months ago

0.4.2

10 months ago

0.4.1

10 months ago

0.4.0

10 months ago

0.3.2

10 months ago

0.3.1

10 months ago

0.3.0

10 months ago

0.2.1

10 months ago

0.2.0

10 months ago

0.1.3

10 months ago

0.1.2

10 months ago

0.1.1

10 months ago

0.1.0

10 months ago