CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-jest-runner-eslint

An ESLint runner for Jest that integrates ESLint into the Jest testing framework for unified code testing and quality checks

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

configuration.mddocs/

Configuration

Comprehensive configuration system supporting all ESLint CLI options with automatic detection of ESLint configuration type (legacy vs flat config).

Capabilities

Configuration Loading

Configuration loading system using cosmiconfig to find and parse jest-runner-eslint configuration.

/**
 * Loads ESLint options from configuration files
 * Supports package.json, .jest-runner-eslintrc, and jest-runner-eslint.config.js
 * @param configType - ESLint configuration type ('flat' or 'legacy')
 * @param config - Jest configuration object containing rootDir
 * @returns Normalized ESLint options object
 */
function getESLintOptions(
  configType: 'flat' | 'legacy',
  config: { rootDir: string }
): { cliOptions: ESLintCliOptions };

Usage Examples:

// package.json configuration
{
  "jest-runner-eslint": {
    "cliOptions": {
      "fix": true,
      "cache": true,
      "format": "codeframe"
    }
  }
}

// jest-runner-eslint.config.js
module.exports = {
  cliOptions: {
    fix: true,
    cache: true,
    cacheLocation: './eslint-cache',
    maxWarnings: 0,
    format: 'stylish'
  }
};

// .jest-runner-eslintrc (JSON)
{
  "cliOptions": {
    "quiet": true,
    "fix": false,
    "ext": [".js", ".jsx", ".ts", ".tsx"]
  }
}

Configuration Normalization

System for normalizing configuration options based on ESLint configuration type.

/**
 * Normalizes configuration object with proper CLI options
 * @param configType - ESLint configuration type
 * @param config - Raw configuration object
 * @returns Normalized configuration with cliOptions
 */
function normalizeConfig(
  configType: 'flat' | 'legacy',
  config: Partial<JestRunnerESLintConfig>
): JestRunnerESLintConfig;

/**
 * Normalizes CLI options based on configuration type
 * @param configType - ESLint configuration type
 * @param rawConfig - Raw CLI options object
 * @returns Normalized CLI options object
 */
function normalizeCliOptions(
  configType: 'flat' | 'legacy',
  rawConfig: Partial<ESLintCliOptions>
): ESLintCliOptions;

Configuration Schemas

Configuration schemas for different ESLint configuration types.

/** Base configuration schema shared by both config types */
const BASE_CONFIG: ConfigSchema;

/** Legacy ESLint configuration schema (ESLint <8.57.0) */
const LEGACY_CONFIG: ConfigSchema;

/** Flat ESLint configuration schema (ESLint >=8.57.0) */
const FLAT_CONFIG: ConfigSchema;

interface ConfigSchema {
  [key: string]: {
    name?: string;
    default: any;
    transform?: (value: any) => any;
  };
}

ESLint CLI Options

Complete interface for ESLint CLI options supported by jest-runner-eslint.

interface ESLintCliOptions {
  // Basic options (supported in both legacy and flat config)
  /** Enable ESLint caching */
  cache?: boolean;
  /** Location of cache file */
  cacheLocation?: string;
  /** Path to ESLint configuration file */
  config?: string;
  /** Automatically fix problems */
  fix?: boolean;
  /** Fix problems without saving files */
  fixDryRun?: boolean;
  /** Output format for ESLint results */
  format?: string;
  /** Maximum number of warnings allowed */
  maxWarnings?: number;
  /** Disable warning output, only show errors */
  quiet?: boolean;
  /** Disable ignore files and patterns */
  noIgnore?: boolean;
  /** Disable inline configuration comments */
  noInlineConfig?: boolean;
  
  // Legacy config options (ESLint <8.57.0)
  /** File extensions to lint */
  ext?: string | string[];
  /** Environment presets to enable */
  env?: string | string[];
  /** Global variables to define */
  global?: string | string[];
  /** Path to ignore file */
  ignorePath?: string;
  /** Ignore patterns to apply */
  ignorePattern?: string[];
  /** Disable .eslintrc files */
  noEslintrc?: boolean;
  /** Parser to use for code analysis */
  parser?: string;
  /** Parser options object */
  parserOptions?: Record<string, any>;
  /** ESLint plugins to load */
  plugin?: string | string[];
  /** Report unused disable directives */
  reportUnusedDisableDirectives?: boolean;
  /** Base path for resolving plugins */
  resolvePluginsRelativeTo?: string;
  /** Rules configuration object */
  rules?: Record<string, any>;
  /** Additional rules directories */
  rulesdir?: string | string[];
}

interface JestRunnerESLintConfig {
  /** CLI options for ESLint */
  cliOptions?: ESLintCliOptions;
}

Usage Examples:

// Comprehensive configuration example
module.exports = {
  cliOptions: {
    // Basic options
    cache: true,
    cacheLocation: './node_modules/.cache/eslint',
    format: 'codeframe',
    fix: false,
    maxWarnings: 10,
    quiet: false,
    
    // Legacy config options (if using ESLint <8.57.0)
    ext: ['.js', '.jsx', '.ts', '.tsx'],
    env: ['browser', 'node'],
    global: ['window', 'document'],
    plugin: ['react', 'import'],
    rules: {
      'no-console': 'warn',
      'prefer-const': 'error'
    },
    
    // File patterns
    ignorePattern: ['dist/*', 'build/*'],
    noIgnore: false,
    noInlineConfig: false
  }
};

Transformation Functions

Utility functions for transforming configuration values.

/** Identity function - returns value unchanged */
const identity: <T>(value: T) => T;

/** Negation function - returns boolean opposite */
const negate: (value: boolean) => boolean;

/** Array conversion function - converts string to single-item array */
const asArray: (value: string | string[]) => string[];

/** Integer conversion function - converts string to number */
const asInt: (value: string | number) => number;

Usage Examples:

// Configuration with type transformations
const config = {
  cliOptions: {
    ext: '.js', // Transformed to ['.js'] by asArray
    maxWarnings: '5', // Transformed to 5 by asInt
    noEslintrc: true, // Transformed to useEslintrc: false by negate
  }
};

// Dot-prop path transformation for nested properties
const legacyConfig = {
  env: ['browser'], // Becomes overrideConfig.env
  global: ['window'], // Becomes overrideConfig.globals
  rules: { 'no-console': 'warn' } // Becomes overrideConfig.rules
};

Configuration Discovery

Configuration files are discovered using cosmiconfig in the following order:

  1. jest-runner-eslint property in package.json
  2. .jest-runner-eslintrc file (JSON)
  3. .jest-runner-eslintrc.json file
  4. .jest-runner-eslintrc.js file
  5. jest-runner-eslint.config.js file

The search starts from the Jest rootDir and traverses up the directory tree until a configuration is found or the file system root is reached.

docs

configuration.md

index.md

jest-runner.md

watch-plugin.md

tile.json