JSPM

  • Created
  • Published
  • Downloads 172
  • Score
    100M100P100Q98734F
  • License MIT

ESLint configuration vision of ElsiKora

Package Exports

    Readme

    project-logo

    ESLint-Config 🛡️

    A comprehensive and modular ESLint configuration system by ElsiKora

    ElsiKora version typescript eslint license node dependencies

    📚 Table of Contents

    📖 Description

    ESLint-Config provides a sophisticated, modular ESLint configuration system that simplifies the enforcement of consistent code style and quality standards across projects. It offers a range of specialized rule sets for various environments, frameworks, and languages including TypeScript, React, Next.js, NestJS, and more. By adopting this package, development teams can ensure code consistency, reduce bugs, improve maintainability, and accelerate onboarding processes for new team members. The plugin-based architecture makes it easy to adapt to different project requirements while maintaining a consistent coding style across your organization.

    🚀 Features

    • ✅ Highly modular and customizable configuration system with granular control
    • ✅ Comprehensive TypeScript support with strict type checking and naming conventions
    • ✅ First-class React, Next.js and NestJS integration with specialized rules
    • ✅ Built-in support for modern CSS, Tailwind, JSON, YAML and Markdown linting
    • ✅ Format-agnostic with Prettier compatibility for consistent code style
    • ✅ Advanced code quality rules from SonarJS and perfectionists
    • ✅ Robust file structure enforcement with check-file plugin
    • ✅ Smart plugin name remapping to avoid conflicts
    • ✅ Optimized for monorepos and multi-framework projects
    • ✅ Extensive test coverage and E2E validation

    🛠 Installation

    # Using npm
    npm install --save-dev @elsikora/eslint-config
    
    # Using yarn
    yarn add --dev @elsikora/eslint-config
    
    # Using pnpm
    pnpm add --save-dev @elsikora/eslint-config
    
    # Using bun
    bun add --dev @elsikora/eslint-config
    
    
    Optional dependencies will be installed based on your configuration requirements. For example, if you plan to use TypeScript linting, ensure you have the TypeScript-related ESLint plugins installed.

    💡 Usage

    Basic Usage

    Create an eslint.config.js file at the root of your project:

    import { createConfig } from "@elsikora/eslint-config";
    
    export default createConfig({
        withTypescript: true,
        withPrettier: true
    });

    With Ignore Patterns

    import { createConfig } from "@elsikora/eslint-config";
    
    const config = {
        ignores: [
            "node_modules/**",
            "dist/**",
            "build/**",
            "coverage/**"
        ]
    };
    
    export default [
        config,
        ...(await createConfig({
            withTypescript: true,
            withJavascript: true,
            withPrettier: true
        }))
    ];

    TypeScript Project Configuration

    For a TypeScript project with React:

    import { createConfig } from "@elsikora/eslint-config";
    
    export default createConfig({
        withTypescript: true,
        withReact: true,
        withStylistic: true,
        withSonar: true
    });

    NestJS Backend Configuration

    import { createConfig } from "@elsikora/eslint-config";
    
    export default createConfig({
        withTypescript: true,
        withNest: true,
        withTypeorm: true,
        withNode: true
    });

    Next.js Full-Stack Configuration

    import { createConfig } from "@elsikora/eslint-config";
    
    export default createConfig({
        withTypescript: true,
        withReact: true,
        withNext: true,
        withTailwindCss: true,
        withNode: true,
        withPrettier: true
    });

    Available Configuration Options

    The configuration factory accepts the following options:

    interface IConfigOptions {
        withCheckFile?: boolean;      // File structure and naming convention rules
        withCss?: boolean;           // CSS linting
        withJavascript?: boolean;    // JavaScript rules
        withJsDoc?: boolean;         // JSDoc validation
        withJson?: boolean;          // JSON linting
        withJsx?: boolean;           // JSX a11y rules
        withMarkdown?: boolean;      // Markdown linting
        withNest?: boolean;          // NestJS specific rules
        withNext?: boolean;          // Next.js specific rules
        withNode?: boolean;          // Node.js specific rules
        withPackageJson?: boolean;   // package.json validation
        withPerfectionist?: boolean; // Sorting imports, props, etc.
        withPrettier?: boolean;      // Prettier integration
        withReact?: boolean;         // React rules
        withRegexp?: boolean;        // RegExp validation
        withSonar?: boolean;         // SonarJS code quality rules
        withStylistic?: boolean;     // Code style rules
        withTailwindCss?: boolean;   // Tailwind CSS specific rules
        withTypeorm?: boolean;       // TypeORM specific rules
        withTypescript?: boolean;    // TypeScript rules
        withUnicorn?: boolean;       // Unicorn rules
        withYaml?: boolean;          // YAML linting
    }

    CLI Usage

    Run ESLint using your configured rules:

    # Check files
    npx eslint "src/**/*.{ts,tsx,js,jsx}"
    
    # Fix issues automatically
    npx eslint "src/**/*.{ts,tsx,js,jsx}" --fix

    Package.json Integration with lint-staged

    {
      "scripts": {
        "lint": "eslint .",
        "lint:fix": "eslint . --fix"
      },
      "lint-staged": {
        "*.{js,jsx,ts,tsx}": [
          "eslint --fix",
          "prettier --write"
        ]
      }
    }

    VS Code Integration

    Create a .vscode/settings.json file:

    {
      "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
      },
      "eslint.validate": [
        "javascript",
        "typescript",
        "javascriptreact",
        "typescriptreact",
        "json",
        "jsonc",
        "yaml"
      ]
    }

    Advanced: Custom Rule Extension

    You can extend the configuration with your own custom rules:

    import { createConfig } from "@elsikora/eslint-config";
    
    export default [
        ...(await createConfig({
            withTypescript: true,
            withReact: true
        })),
        {
            rules: {
                // Override or add custom rules
                "@elsikora-typescript/naming-convention": ["error", {
                    // Your custom configuration
                }]
            }
        }
    ];

    🛣 Roadmap

    Task / Feature Status
    Future plans for ESLint-Config include: 🚧 In Progress
    - Expanded configuration options for additional frameworks and libraries 🚧 In Progress
    - Integration with more language servers for better IDE support 🚧 In Progress
    - Pre-built configurations for common project types (monorepo, microservices, etc.) 🚧 In Progress
    - Custom rule generator for organization-specific standards 🚧 In Progress
    - Performance optimizations for large codebases 🚧 In Progress
    - Expanded test coverage with more framework-specific test cases 🚧 In Progress
    - Web-based configuration tool for generating custom configurations 🚧 In Progress
    - Integration with more CI/CD platforms 🚧 In Progress
    Completed tasks from CHANGELOG:
    config: javascript and typescript configs push (b4d52fa) ✅ Done
    b0a2622: Add licensing setup and improve ESLint configurations ✅ Done
    f5ff96f: Update package version to 3.2.2 and add dependencies ✅ Done
    e130422: Refactor ESLint CLI and feature configurations ✅ Done
    724aa99: Enhance gitignore handling in CLI setup process ✅ Done
    924e701: Add automated .gitignore configuration in CLI setup ✅ Done
    10dd85f: Added GitHub CI and Changesets, bug fixes ✅ Done
    c617e39: Added GitHub CI and Changesets, bug fixes ✅ Done
    22b3e8e: Updated ✅ Done
    545cdc3: Updated ✅ Done
    f3ebdb2: Updated ✅ Done
    feed5d9: Updated ✅ Done
    1530118: Updated formats ✅ Done
    e0207ae: Update ✅ Done
    eb5978e: Remove ESLint configuration files ✅ Done
    7faa539: Update eslint-plugin-sonarjs version ✅ Done
    da065c9: Update eslint-plugin-unused-imports version ✅ Done
    41904f8: Update src/react.js with new configurations ✅ Done
    b7e4114: Add react.js to package.json ✅ Done
    8ed4d7b: Add support for React in eslint configuration ✅ Done
    d1397a2: Add TypeScript resolver to eslint configuration ✅ Done
    f39fafb: Update dependency version and eslint format for Readonly properties ✅ Done
    bacf14c: Add Snyk, Qodana, and CodeCommit workflows; update eslint rules ✅ Done
    4ea686c: Add peer dependency and refactor README paths ✅ Done
    4855b6a: Update main file and fix README links ✅ Done
    4855b6a: Update main file and fix README links ✅ Done
    8cce705: Update postbuild script and README with detailed configs ✅ Done
    909b60d: Optimize build script and update files list in package.json ✅ Done
    053c4d9: Refactor package structure and improve build process ✅ Done
    1cb8e4c: Convert project to use ECMAScript modules ✅ Done
    68069a5: Update filename and folder naming conventions in configuration ✅ Done
    de6cf23: Remove specific parserOptions and settings in typescript.js ✅ Done
    951eaec: Add detailed linting rules and configurations ✅ Done
    ecf92eb: Add readme file and update package.json scripts ✅ Done
    2577937: Added NestJS config ✅ Done
    2577937: Added basic JavaScript rules ✅ Done

    ❓ FAQ

    Frequently Asked Questions

    How do I migrate from a traditional .eslintrc configuration?

    ESLint 9.x and above use the new flat config format. To migrate, convert your existing .eslintrc file to an eslint.config.js file and use the createConfig function with the appropriate options to match your previous setup.

    Will this work with my editor's ESLint plugin?

    Yes, modern editor ESLint plugins (VS Code, WebStorm, etc.) support the new flat config format used by this package.

    How does this handle conflicting rules between plugins?

    The configuration has been carefully designed to avoid rule conflicts. When conflicts might occur, we've established a priority system, generally favoring TypeScript-specific rules over general ESLint rules when applicable.

    Can I use this with Prettier?

    Yes! Enable the withPrettier option to integrate Prettier. This will ensure ESLint doesn't conflict with Prettier's formatting rules.

    Does this support React Native projects?

    Yes, you can use this with React Native by enabling the withReact option. Additional React Native specific rules may need to be added separately.

    How do I debug rule conflicts or issues?

    You can run ESLint with the --debug flag to see detailed information about rule resolution and conflicts:

    npx eslint --debug src/file.ts

    How can I contribute to this project?

    Contributions are welcome! Please check the contribution guidelines in the repository for information on how to submit issues or pull requests.

    🔒 License

    This project is licensed under **MIT License

    Copyright (c) 2025 ElsiKora

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.**.

    📋 Changelog

    See CHANGELOG.md for details.