2.0.5 โ€ข Published 5 months ago

@estjs/eslint-config v2.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

@estjs/eslint-config

npm version node version license

Comprehensive flat ESLint configuration for modern JavaScript/TypeScript projects

A unified, easy-to-use ESLint configuration package supporting JavaScript, TypeScript, Vue 2, Vue 3, React, Node, RegExp, UnoCSS, Markdown, and JSDoc.

โœจ Features

  • ๐Ÿ” Modern Format Engine - Powered by Biome with optimized rules
  • ๐Ÿš€ Zero Configuration - Works out-of-the-box with TypeScript, Vue 2/3, and more
  • ๐Ÿ“ฆ Broad Support - Handles JSON(5), YAML, Markdown, and other file formats
  • ๐Ÿงน Smart Organization - Automatically sorts imports, package.json, tsconfig.json, etc.
  • ๐Ÿ”ง Flat Config System - Uses ESLint Flat config for easy composition
  • โš™๏ธ Auto Detection - Intelligently enables features based on your project dependencies
  • ๐Ÿ’ป Dev Experience - Reasonable defaults and best practices with minimal configuration

๐Ÿ“‹ Requirements

  • Node.js >= 18

๐Ÿ“ฅ Installation

# npm
npm install -D @estjs/eslint-config

# yarn
yarn add -D @estjs/eslint-config

# pnpm
pnpm add -D @estjs/eslint-config

๐Ÿ› ๏ธ Usage

Create an eslint.config.js file in your project root:

import { estjs } from '@estjs/eslint-config';

export default estjs(
  // Override default configurations
  {
    javascript: {
      'unused-imports/no-unused-imports': 'off',
      'unused-imports/no-unused-vars': 'off',
      'no-console': 'off',
    },
    unicorn: {
      'unicorn/filename-case': 'off',
    },
    imports: {
      'import/no-default-export': 'off',
    },
  },

  // Configure features - auto-detected by default
  {
    biome: true, // default: false
    markdown: true, // default: true
    vue: true, // auto-detected based on dependencies
    unocss: false, // auto-detected based on dependencies
    typescript: true, // auto-detected based on dependencies
    react: true, // auto-detected based on dependencies
    node: true, // default: true
    prettier: true, // default: true
    pnpm: false, // default: false
    test: true, // auto-detected based on dependencies
  },
);

๐Ÿ”„ Configuration Options

Override Rules

You can override any rules in the first parameter:

export default estjs({
  // JavaScript/TypeScript related rules
  javascript: {
    // Override JavaScript related rules
  },

  // TypeScript specific rules (only applied when typescript is enabled)
  typescript: {
    // Override TypeScript related rules
  },

  // Import organization and validation
  imports: {
    // Override import plugin rules
  },

  // Unicorn plugin rules
  unicorn: {
    // Override unicorn plugin rules
  },

  // JSDoc validation rules
  jsdoc: {
    // Override JSDoc related rules
  },

  // Vue specific rules
  vue: {
    // Override Vue related rules
  },

  // Markdown processing rules
  markdown: {
    // Override Markdown related rules
  },

  // Biome configuration options
  biome: {
    // Override Biome config
  },

  // Prettier configuration
  prettier: {
    // Override Prettier config
  },

  // React specific rules
  react: {
    // Override React related rules
  },

  // Testing related rules
  test: {
    // Override testing related rules
  },

  // Global variables to enable
  globals: {
    // Define global variables
    myGlobal: true,
  },

  // RegExp validation rules
  regexp: {
    // Override RegExp related rules
  },

  // PNPM specific rules
  pnpm: {
    yaml: {}, // YAML config for PNPM
    json: {}, // JSON config for PNPM
  },

  // Patterns to ignore
  ignores: [
    // Add files/directories to ignore
    'dist',
    '.cache',
  ],
});

Feature Flags

The second parameter controls which features to enable:

OptionDefaultDescription
biomefalseEnable Biome formatting integration
markdowntrueEnable Markdown linting
vueautoEnable Vue support
unocssautoEnable UnoCSS support
typescriptautoEnable TypeScript support
reactautoEnable React support
nodetrueEnable Node.js specific rules
prettiertrueEnable Prettier formatting
pnpmfalseEnable PNPM specific rules see
testautoEnable testing rules

Note: When biome is enabled, it will automatically disable certain ESLint rules that conflict with Biome's rules. If using global formatting, it will run biome format on your files.

๐Ÿ”ง Biome Configuration

You can extend the default Biome configuration by creating a biome.json file in your project root:

{
  "$schema": "node_modules/@biomejs/biome/configuration_schema.json",
  "extends": ["node_modules/@estjs/eslint-config/biome.json"],
  "organizeImports": {
    "enabled": true
  },
  "linter": {
    "rules": {
      // Your custom rules here
    }
  }
}

When biome is enabled and global formatting is active, biome format will run on your files. The configuration is merged with any Biome configuration found in your project.

๐Ÿ“Š Additional Features

The config includes several additional features that are automatically applied:

  • Comments: Rules for properly formatting comments
  • Sort Keys: Automatic sorting of object keys
  • JSONC: Support for JSON with comments
  • Sort Package JSON: Automatic organization of package.json files
  • Sort TSConfig: Automatic organization of tsconfig.json files
  • YAML: Support for YAML files
  • RegExp: Validation for regular expressions

๐Ÿ“š Examples

TypeScript + Vue 3 Project

// eslint.config.js
import { estjs } from '@estjs/eslint-config';

export default estjs(); // Auto-detects Vue and TypeScript

React + Node.js Project

// eslint.config.js
import { estjs } from '@estjs/eslint-config';

export default estjs({
  javascript: {
    'no-console': 'warn',
  },
  globals: {
    React: true,
  },
}); // Auto-detects React and Node.js

Project with Biome for Formatting

// eslint.config.js
import { estjs } from '@estjs/eslint-config';

export default estjs(
  {
    // Your rule overrides
  },
  {
    biome: true, // Enable Biome
    prettier: false, // Disable Prettier (optional as Biome will be used)
  },
);

PNPM Workspace

// eslint.config.js
import { estjs } from '@estjs/eslint-config';

export default estjs(
  {
    // Your rule overrides
    pnpm: {
      yaml: {
        // YAML-specific configs for pnpm-workspace.yaml
      },
    },
  },
  {
    pnpm: true, // Enable PNPM-specific rules
  },
);

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

๐Ÿ“„ License

MIT License ยฉ 2023-present Est.js

2.0.2-beta.1

6 months ago

1.2.10-beta.1

9 months ago

1.2.13-beta.1

9 months ago

2.0.3

6 months ago

2.0.2

6 months ago

2.0.5

5 months ago

2.0.4

6 months ago

2.0.0

7 months ago

1.2.12

10 months ago

1.2.10

11 months ago

1.2.11

10 months ago

2.0.0-beta.9

9 months ago

2.0.0-beta.8

9 months ago

2.0.0-beta.7

9 months ago

2.0.0-beta.2

9 months ago

2.0.0-beta.1

9 months ago

2.0.0-beta.6

9 months ago

2.0.0-beta.3

9 months ago

2.0.0-beta.11

9 months ago

2.0.0-beta.10

9 months ago

2.0.0-beta.15

8 months ago

2.0.0-beta.14

8 months ago

2.0.0-beta.13

8 months ago

2.0.0-beta.12

9 months ago

2.0.0-beta.16

8 months ago

1.2.9

12 months ago

1.2.0

1 year ago

1.2.7

1 year ago

1.2.6

1 year ago

1.2.5

1 year ago

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.2.1

1 year ago

1.1.3

1 year ago

1.1.2

1 year ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.22

2 years ago

1.0.21

2 years ago

1.0.20

2 years ago

1.0.19

2 years ago

1.0.18

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.11

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.5-beta.0

2 years ago

1.0.4

2 years ago

1.0.2

2 years ago

1.0.3

2 years ago

0.9.2-beta.9

2 years ago

0.9.2-beta.8

2 years ago

0.9.2-beta.7

2 years ago

0.9.2-beta.6

2 years ago

0.9.2-beta.5

2 years ago

0.9.2-beta.4

2 years ago

0.9.2-beta.3

2 years ago

0.9.2-beta.2

2 years ago

0.9.2-beta.10

2 years ago

0.9.2-beta.15

2 years ago

0.9.1-beta.15

2 years ago

0.9.1

2 years ago

0.9.1-beta.7

2 years ago

0.9.1-beta.9

2 years ago

0.9.1-beta.10

2 years ago

0.9.1-beta.14

2 years ago

0.9.1-beta.13

2 years ago

0.9.1-beta.12

2 years ago

0.8.32

2 years ago

0.8.31

2 years ago

0.8.28

2 years ago

0.8.8

2 years ago

0.8.5

2 years ago

0.8.7

2 years ago

0.8.6

2 years ago

0.7.20

2 years ago

0.7.19-beta.1

2 years ago

0.7.4

2 years ago

0.7.3

2 years ago

0.7.19-beta.5

2 years ago

0.7.19-beta.4

2 years ago

0.7.11

2 years ago

0.7.10

2 years ago

0.7.13

2 years ago

0.7.12

2 years ago

0.7.19

2 years ago

0.7.18

2 years ago

0.7.15

2 years ago

0.7.16

2 years ago

0.8.1

2 years ago

0.8.3

2 years ago

0.8.2

2 years ago

0.8.0-beta.14

2 years ago

0.8.0-beta.15

2 years ago

0.8.0-beta.16

2 years ago

0.8.15-beta.1

2 years ago

0.8.15-beta.4

2 years ago

0.8.15-beta.3

2 years ago

0.8.0-beta.10

2 years ago

0.8.0-beta.11

2 years ago

0.8.0-beta.12

2 years ago

0.8.0-beta.13

2 years ago

0.8.15-beta.0

2 years ago

0.7.9

2 years ago

0.7.6

2 years ago

0.7.8

2 years ago

0.8.20

2 years ago

0.7.7

2 years ago

0.7.13-beta.0

2 years ago

0.7.13-beta.1

2 years ago

0.7.13-beta.2

2 years ago

0.7.11-beta.2

2 years ago

0.7.3-beta.0

2 years ago

0.7.3-beta.2

2 years ago

0.8.12

2 years ago

0.8.0-beta.7

2 years ago

0.8.0-beta.8

2 years ago

0.8.14

2 years ago

0.8.0-beta.5

2 years ago

0.8.13

2 years ago

0.8.0-beta.6

2 years ago

0.8.0-beta.9

2 years ago

0.8.0-beta.0

2 years ago

0.8.16

2 years ago

0.8.0-beta.3

2 years ago

0.8.15

2 years ago

0.8.0-beta.4

2 years ago

0.8.0-beta.1

2 years ago

0.8.17

2 years ago

0.7.2-beta.1

2 years ago

0.7.2-beta.4

2 years ago

0.7.2-beta.3

2 years ago

0.7.2-beta.6

2 years ago

0.7.2

2 years ago

0.7.1

2 years ago

0.7.0

2 years ago

0.4.9

3 years ago

0.4.8

3 years ago

0.6.0-beta.8

3 years ago

0.6.0-beta.7

3 years ago

0.6.0-beta.9

3 years ago

0.6.0-beta.3

3 years ago

0.6.0-beta.5

3 years ago

0.6.0-beta.0

3 years ago

0.6.0-beta.11

3 years ago

0.6.0-beta.10

3 years ago

0.5.4-beta.0

3 years ago

0.4.10

3 years ago

0.4.13

3 years ago

0.4.14

3 years ago

0.4.12

3 years ago

0.4.4

3 years ago

0.4.7

3 years ago

0.4.1

3 years ago

0.4.0

3 years ago

0.4.3

3 years ago

0.4.2

3 years ago

0.6.7

3 years ago

0.6.9

2 years ago

0.6.8

3 years ago

0.7.0-beta.0

2 years ago

0.7.0-beta.1

2 years ago

0.7.0-beta.3

2 years ago

0.6.10

2 years ago

0.6.11

2 years ago

0.6.17

2 years ago

0.6.19

2 years ago

0.6.14

2 years ago

0.6.13

2 years ago

0.6.15

2 years ago

0.6.3-beta.0

3 years ago

0.6.3-beta.1

3 years ago

0.5.3

3 years ago

0.6.3-beta.4

3 years ago

0.5.0

3 years ago

0.6.3-beta.5

3 years ago

0.6.3-beta.2

3 years ago

0.6.3-beta.3

3 years ago

0.6.10-beta.1

2 years ago

0.6.16-beta.0

2 years ago

0.6.10-beta.3

2 years ago

0.6.16-beta.2

2 years ago

0.6.11-beta.2

2 years ago

0.6.11-beta.1

2 years ago

0.6.11-beta.0

2 years ago

0.6.3

3 years ago

0.6.2

3 years ago

0.6.5

3 years ago

0.6.4

3 years ago

0.6.1

3 years ago

0.3.16

3 years ago

0.3.11

3 years ago

0.3.6

3 years ago

0.3.5

3 years ago

0.3.8

3 years ago

0.3.2

3 years ago

0.3.4

3 years ago

0.3.3

3 years ago

0.3.0

3 years ago

0.3.1

3 years ago

0.2.25

3 years ago

0.2.23

3 years ago

0.2.22

3 years ago

0.2.21

3 years ago

0.2.20

3 years ago

0.2.19

3 years ago

0.2.18

3 years ago

0.2.17

3 years ago

0.2.16

3 years ago

0.2.15

3 years ago

0.2.14

3 years ago

0.2.13

3 years ago

0.2.12

3 years ago

0.2.11

3 years ago

0.2.10

4 years ago

0.2.0

4 years ago

0.1.8

4 years ago

0.2.6

4 years ago

0.2.9

4 years ago

0.2.8

4 years ago

0.2.2

4 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago

0.0.10

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.1

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago