CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-putout--eslint-flat

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

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

directory-config.mddocs/

Directory 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.

Capabilities

matchToFlatDir Function

Builds ESLint flat config for a specific directory path, automatically reading configuration files and adjusting file patterns with directory prefixes.

/**
 * Builds ESLint flat config for a specific directory path
 * @param {string|URL} cwd - Current working directory or file URL
 * @param {string} path - Relative path to directory
 * @param {Object} [config] - Optional existing config object, reads from directory if not provided
 * @param {Object} [overrides] - Optional override functions for dependency injection
 * @returns {Promise<Array<Object>>} Promise resolving to array of ESLint flat config objects
 */
async function matchToFlatDir(cwd, path, config, overrides);

Parameters:

  • cwd (string|URL): Current working directory or file:// URL (supports import.meta.url)
  • path (string): Relative path to the directory containing ESLint configuration
  • config (Object, optional): Existing configuration object. If not provided, reads from directory
  • overrides (Object, optional): Override functions for dependency injection (currently no public override options available)

Returns: Promise resolving to array of ESLint flat config objects with properly prefixed file patterns.

Usage Examples:

With File Path:

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

// Using __dirname (CommonJS)
const config = await matchToFlatDir(__dirname, './packages/putout');

// The function will:
// 1. Read eslint config from ./packages/putout directory
// 2. Prefix all file patterns with **/packages/putout/
// 3. Return flat config array

With File URL (ESM):

import { matchToFlatDir } from '@putout/eslint-flat';

// Using import.meta.url (ESM)
const config = await matchToFlatDir(import.meta.url, './packages/putout');

With Custom Configuration:

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

// Provide config directly instead of reading from directory
const customConfig = {
  match: {
    'bin/*.js': {
      'n/hashbang': 'off',
    },
    'lib/**/*.js': {
      'complexity': ['error', 10],
    },
  },
};

const result = await matchToFlatDir(__dirname, './my-package', customConfig);
// Result will have patterns like:
// - files: ['**/my-package/bin/*.js']
// - files: ['**/my-package/lib/**/*.js']

In Monorepo ESLint Config:

const { safeAlign } = require('eslint-plugin-putout/config');
const { matchToFlatDir } = require('@putout/eslint-flat');

module.exports = [
  ...safeAlign,
  // Include configuration from specific package
  ...await matchToFlatDir(__dirname, './packages/putout'),
  ...await matchToFlatDir(__dirname, './packages/eslint-flat'),
];

Configuration File Resolution

The function automatically tries to read ESLint configuration in this order:

  1. Modern flat config files:

    • eslint.config.js
    • eslint.config.cjs
    • eslint.config.mjs
  2. Legacy configuration:

    • .eslintrc.json (converted using ESLint's FlatCompat)

Configuration Formats

Match Object Format (Simplified): If the config exports a match property, it uses the simplified object format:

// In ./packages/my-package/eslint.config.js
module.exports = {
  match: {
    'src/*.js': {
      'no-console': 'warn',
    },
    'test/*.js': {
      'no-console': 'off',
    },
  },
};

Standard Flat Config Format: If no match property, processes as standard ESLint flat config:

// In ./packages/my-package/eslint.config.js
module.exports = [
  {
    files: ['src/*.js'],
    rules: {
      'no-console': 'warn',
    },
  },
  {
    files: ['test/*.js'],
    rules: {
      'no-console': 'off',
    },
    ignores: ['test/fixtures/**'],
  },
];

Path Handling

File Pattern Processing:

  • Automatically prefixes file patterns with **/directory-path/
  • Handles both simple patterns and complex glob patterns
  • Preserves function-based file patterns without modification

Ignore Pattern Processing:

  • Processes ignores arrays by prefixing with directory path
  • Preserves function-based ignore patterns
  • Only adds ignores property if patterns exist

URL Support:

  • Supports both regular directory paths and file:// URLs
  • Automatically converts file:// URLs to file system paths
  • Useful for ESM modules using import.meta.url

Error Handling

  • Returns empty array [] if no configuration files are found
  • Gracefully handles missing directories
  • Uses try-catch internally to prevent errors from propagating
  • Supports dependency injection via overrides for testing

Install with Tessl CLI

npx tessl i tessl/npm-putout--eslint-flat

docs

directory-config.md

index.md

monorepo-config.md

transformation.md

tile.json