Baseline Logoeslint-plugin-baseline-js

Config

Key rule options and presets, with copy‑pasteable examples.

Options (overview)

Quick reference(all options)

UseBaselineOptions (minimal)
type BaselineName = 'widely' | 'newly';
type BaselineOption = BaselineName | number; // YYYY

type IncludePreset = 'auto' | 'safe' | 'type-aware';
type Include = boolean | { preset?: IncludePreset };

interface UseBaselineOptions {
  available?: BaselineOption;
  baseline?: BaselineOption;

  includeWebApis?: Include;
  includeJsBuiltins?: Include;

  ignoreFeatures?: string[];  // featureId or /regex/
  ignoreNodeTypes?: string[]; // ESTree node.type or /regex/
}
Advanced options (optional)

Use these only when you need tighter control (forcing types or narrowing targets).

type UseTypes = 'off' | 'auto' | 'require';
interface IncludeAdvanced {
  preset?: 'auto' | 'safe' | 'type-aware';
  useTypes?: UseTypes;   // How to use types ('type-aware' effectively means 'require')
  only?: string[];       // Limit to specific featureIds
  ignore?: string[];     // Exclude specific featureIds
}

Core options

PropTypeDefaultDescription
availablewidely / newly / YYYYwidelyBaseline threshold

Feature detection

includeWebApis

Type (common)
type Include = boolean | { preset?: 'auto' | 'safe' | 'type-aware' };
  • Default: off in configs.baseline, 'auto' in configs.recommended
  • Purpose: choose how aggressively to detect Web APIs (see presets)
Common
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 'widely',
    includeWebApis: { preset: 'auto' },
  }],
}

includeJsBuiltins

Type (common)
type Include = boolean | { preset?: 'auto' | 'safe' | 'type-aware' };
  • Default: off in configs.baseline, 'auto' in configs.recommended
  • Purpose: choose how aggressively to detect JS Builtins (same shape as includeWebApis)
Common
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 'widely',
    includeJsBuiltins: { preset: 'auto' },
  }],
}

Filters & suppression

  • ignoreFeatures: string[] — web‑features featureId or /regex/
  • ignoreNodeTypes: string[] — ESTree node.type (e.g. WithStatement)
Ignore examples
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 2020,
    ignoreFeatures: ['nullish-coalescing', '/^optional-/'],
    ignoreNodeTypes: ['WithStatement', '/Expression$/'],
  }],
}

Preset semantics (overview)

See below for code examples showing preset: 'safe' | 'auto' | 'type‑aware' in action.

includeWebApis / includeJsBuiltins — meaning & examples

Both control “what surface to detect and how aggressive it should be”. The three common modes:

  • preset: 'safe' (most conservative)

    • Detects only literal‑safe patterns (low false positives)
    • Example:
      safe preset (JS Builtins)
      rules: {
        'baseline-js/use-baseline': ['error', {
          available: 'widely',
          includeJsBuiltins: { preset: 'safe' },
        }],
      }
  • preset: 'auto' (recommended)

    • Uses types when available, otherwise falls back safely
    • Example:
      auto preset (Web APIs + JS Builtins)
      rules: {
        'baseline-js/use-baseline': ['error', {
          available: 'widely',
          includeWebApis: { preset: 'auto' },
          includeJsBuiltins: { preset: 'auto' },
        }],
      }
  • preset: 'type-aware' (strictest)

    • Requires TS types. Resolves the receiver’s actual type before reporting instance members
    • Example:
      type-aware preset (TS project)
      import tsParser from '@typescript-eslint/parser';
      
      export default [
        { files: ['**/*.{ts,tsx}'], languageOptions: { parser: tsParser, parserOptions: { project: ['./tsconfig.json'] } } },
        {
          rules: {
            'baseline-js/use-baseline': ['error', {
              available: 'widely',
              includeWebApis: { preset: 'type-aware' },
              includeJsBuiltins: { preset: 'type-aware' },
            }],
          },
        },
      ]

Filtering (optional)

  • only: string[] — watch only these featureIds
  • ignore: string[] — exclude these featureIds

featureId refers to web‑features IDs (e.g. nullish-coalescing, intl-locale-info).

Watch a specific feature (only)
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 'widely',
    includeWebApis: { preset: 'safe', only: ['canvas-2d-alpha'] },
  }],
}

Presets (Flat Config)

We currently provide three presets; start here in most cases.

Available presets

configs.baseline / configs.recommended / configs['recommended-ts'] (Flat Config helpers; accept available and level)

configs.baseline (JS Syntax only; Web APIs/JS Builtins off)
import baselineJs from 'eslint-plugin-baseline-js';

export default [
  { plugins: { 'baseline-js': baselineJs } },
  // opts: { available?: 'widely'|'newly'|YYYY; level?: 'error'|'warn' }
  baselineJs.configs.baseline({ available: 'widely', level: 'error' }),
]
Internal: generated rules
rules: { 
  'baseline-js/use-baseline': [level, { available: baseline }]
}

Notes

baseline remains as a compatibility alias; internally it maps to available.

Use with .eslintrc.* (non‑Flat Config)

Flat Config を使わない場合の等価設定です。引数・オプションはすべて available に統一しています。

baseline equivalent (JS Syntax only)
// .eslintrc.js
module.exports = {
  plugins: ['baseline-js'],
  rules: {
    'baseline-js/use-baseline': ['error', { available: 'widely' }],
  },
};
recommended equivalent (Web APIs/JS Builtins on, auto)
// .eslintrc.js
module.exports = {
  plugins: ['baseline-js'],
  rules: {
    'baseline-js/use-baseline': ['error', {
      available: 'widely',
      includeWebApis: { preset: 'auto' },
      includeJsBuiltins: { preset: 'auto' },
    }],
  },
};
recommended‑ts equivalent (TypeScript)
// .eslintrc.js
module.exports = {
  plugins: ['baseline-js'],
  overrides: [
    {
      files: ['**/*.ts', '**/*.tsx'],
      parser: '@typescript-eslint/parser',
      parserOptions: { project: ['./tsconfig.json'] },
      rules: {
        'baseline-js/use-baseline': ['error', {
          available: 'widely',
          includeWebApis: { preset: 'type-aware' },
          includeJsBuiltins: { preset: 'type-aware' },
        }],
      },
    },
  ],
};
Use preset helpers in .eslintrc (partial)

You can spread only the rules from a Flat helper into legacy config.

// .eslintrc.js
const baselineJs = require('eslint-plugin-baseline-js');

module.exports = {
  plugins: ['baseline-js'],
  // baseline / recommended のいずれか
  baselineJs.configs.recommended({ available: 'widely' }),
};
// .eslintrc.js (TypeScript: recommended-ts)
const baselineJs = require('eslint-plugin-baseline-js');

module.exports = {
  plugins: ['baseline-js'],
  overrides: [
    {
      files: ['**/*.ts', '**/*.tsx'],
      parser: '@typescript-eslint/parser',
      parserOptions: { project: ['./tsconfig.json'] },
      baselineJs.configs['recommended-ts']({ available: 'widely' }),
    },
  ],
};

Messages

widely

Feature '<id>' is not a widely available Baseline feature. 

newly

Feature '<id>' is not a newly available Baseline feature. 

Year‑based

Feature '<id>' became Baseline in <YYYY> and exceeds <year>. 

Self rules (internal)

Minimal supplements where community rules don’t exist.

baseline-js/no-bigint64array

  • Detects use of BigInt64Array / BigUint64Array (new / calls / member access)
  • Limitation: shadowed identifiers/aliases not handled yet (ReferenceTracker TBD)

baseline-js/no-function-caller-arguments

  • Detects Function#caller / Function#arguments
  • Limitation: type‑unaware; may react to arbitrary objects’ .caller/.arguments

baseline-js/no-math-sum-precise

  • Detects Math.sumPrecise() (proposal tracking)
  • Limitation: alias calls not handled yet

baseline-js/no-temporal

  • Detects Temporal API usage
  • Limitation: shadowed/aliased Temporal not handled yet

Last updated on