or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

directory-config.mdindex.mdmonorepo-config.mdtransformation.md
tile.json

tessl/npm-putout--eslint-flat

Utilities for working with ESLint Flat Config format, providing object-based syntax and monorepo configuration management.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@putout/eslint-flat@3.0.x

To install, run

npx @tessl/cli install tessl/npm-putout--eslint-flat@3.0.0

index.mddocs/

@putout/eslint-flat

@putout/eslint-flat provides utilities for working with ESLint Flat Config format, offering a more convenient object-based syntax for ESLint configuration management. It simplifies ESLint configuration in monorepos and complex project structures by providing intuitive APIs that reduce boilerplate code and improve maintainability.

Package Information

  • Package Name: @putout/eslint-flat
  • Package Type: npm
  • Language: JavaScript (CommonJS)
  • Installation: npm install @putout/eslint-flat

Core Imports

const { matchToFlat, matchToFlatDir, mergeESLintConfigs, createESLintConfig } = require('@putout/eslint-flat');

Individual imports:

const { matchToFlat } = require('@putout/eslint-flat');
const { matchToFlatDir } = require('@putout/eslint-flat');
const { mergeESLintConfigs } = require('@putout/eslint-flat');
const { createESLintConfig } = require('@putout/eslint-flat');

Basic Usage

const { matchToFlat, matchToFlatDir } = require('@putout/eslint-flat');

// Convert object-based rules to flat config
const match = {
  'bin/cli.js': {
    'n/hashbang': 'off',
  },
  '**/*.spec.js': {
    'n/no-unsupported-features/node-builtins': 'off',
  },
};

const flatConfig = matchToFlat(match);
// Result: [
//   { files: ['bin/cli.js'], rules: { 'n/hashbang': 'off' } },
//   { files: ['**/*.spec.js'], rules: { 'n/no-unsupported-features/node-builtins': 'off' } }
// ]

// Use in monorepo structure
const packageConfig = await matchToFlatDir(__dirname, './packages/my-package');

Architecture

@putout/eslint-flat is built around several key components:

  • Config Transformation: Core utilities (matchToFlat, matchToFlatDir) that convert object-based configurations to ESLint flat config format
  • Monorepo Support: Multi-directory configuration merging (mergeESLintConfigs) for complex project structures
  • Path Handling: Smart file and directory path resolution supporting both regular paths and file:// URLs
  • Legacy Compatibility: Automatic detection and conversion of .eslintrc.json files using ESLint's FlatCompat
  • Utility Functions: Helper function (createESLintConfig) providing convenient access to ESLint's defineConfig

Capabilities

Configuration Transformation

Core functionality for converting object-based ESLint rules to flat config format. Transforms simple key-value rule objects into proper ESLint flat config arrays.

function matchToFlat(config: Object): Array<Object>;

Configuration Transformation

Directory-based Configuration

Advanced configuration building for specific directories, supporting both file paths and file:// URLs. Handles config reading, path resolution, and pattern building for monorepo structures.

async function matchToFlatDir(
  cwd: string | URL,
  path: string,
  config?: Object,
  overrides?: OverrideOptions
): Promise<Array<Object>>;

Directory Configuration

Monorepo Configuration Management

Utilities for merging ESLint configurations across multiple directories in monorepos. Provides bulk configuration processing and flattening.

async function mergeESLintConfigs(
  cwd: string | URL,
  directories: string | Array<string>,
  options?: OverrideOptions
): Promise<Array<Object>>;

function createESLintConfig(configs: Array<Object>): Array<Object>;

Monorepo Management

Types

// Configuration object for simple rule transformation
interface ConfigObject {
  [filePattern: string]: {
    [ruleName: string]: any;
  };
}

// ESLint flat config object structure
interface FlatConfigObject {
  files: Array<string>;
  rules: {
    [ruleName: string]: any;
  };
  ignores?: Array<string>;
}

// Override options for dependency injection
interface OverrideOptions {
  readdir?: (path: string) => Promise<Array<string>>;
}