Utilities for working with ESLint Flat Config format, providing object-based syntax and monorepo configuration management.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advanced configuration building for specific directories, supporting both file paths and file:// URLs. Handles config reading, path resolution, and pattern building for monorepo structures.
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 configurationconfig (Object, optional): Existing configuration object. If not provided, reads from directoryoverrides (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 arrayWith 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'),
];The function automatically tries to read ESLint configuration in this order:
Modern flat config files:
eslint.config.jseslint.config.cjseslint.config.mjsLegacy configuration:
.eslintrc.json (converted using ESLint's FlatCompat)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/**'],
},
];File Pattern Processing:
**/directory-path/Ignore Pattern Processing:
ignores arrays by prefixing with directory pathignores property if patterns existURL Support:
[] if no configuration files are foundInstall with Tessl CLI
npx tessl i tessl/npm-putout--eslint-flat