npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@codacy/tools-eslint-8

v0.6.0

Published

ESLint 8 adapter — Library-mode JavaScript/TypeScript linter (legacy config)

Readme

@codacy/tools-eslint-8

Table of Contents


Overview

JavaScript/TypeScript linter using ESLint 8 with the legacy config format (.eslintrc). Uses the Library execution strategy — calls the ESLint API directly rather than spawning a subprocess.

| Property | Value | | ------------- | ------------------------------------------------- | | Tool ID | ESLint8 | | Codacy UUID | f8b29663-2cb2-498d-b923-a10c6a8c05cd | | Strategy | Library | | Languages | JavaScript, TypeScript | | Dependency | eslint npm package (v8.x) + 90+ plugin packages | | Patterns | 2816 (285 core + 2531 plugin) | | File patterns | **/*.js, **/*.jsx, **/*.ts, **/*.tsx |

Coexistence with ESLint 9

This adapter coexists safely with @codacy/tools-eslint-9 in the same monorepo and the same Node.js process. Key design decisions:

  • pnpm isolation: Each adapter has its own node_modules/eslint symlink pointing to a different version in the pnpm store. import("eslint") from each adapter's built output resolves to the correct version.
  • Inline types: ESLint API types are defined inline (not imported from the eslint package) to avoid TypeScript declaration conflicts.
  • Separate plugin registries: Plugins that need different versions for ESLint 8 vs 9 (e.g. @typescript-eslint, react-hooks) are installed at the correct version in each adapter's own dependencies.
  • Lint script: Uses the root's ESLint 9 for linting source code (node ../../../node_modules/eslint/bin/eslint.js) to avoid the local ESLint 8 binary conflicting with the root's flat config.

Updating patterns

# Re-fetch pattern metadata from the Codacy API
pnpm prefetch

# Commit the result
git add src/patterns.json

Pattern IDs use the codacy-eslint encoding: ___, /_. Examples:

  • ESLint8_no-unused-vars (core rule)
  • ESLint8_@typescript-eslint_no-unused-vars (scoped plugin)
  • ESLint8_react_jsx-no-target-blank (non-scoped plugin)

Updating the ESLint version

ESLint 8 is end-of-life (October 2024). Version updates are not expected. This adapter targets the final 8.57.x release. For newer ESLint, use the eslint-9 adapter.

Development

pnpm build    # Build with tsup
pnpm test     # Run tests

Notes for maintainers

  • ESLint 8 uses the legacy config format (.eslintrc.*). The adapter generates legacy config objects with plugins as string names, parser as an absolute path, and overrides for TypeScript-specific configuration.
  • No executable config files: .eslintrc.js, .eslintrc.cjs, and the extensionless .eslintrc are excluded from local config detection because those formats can directly execute repo-controlled code. Only static formats (.eslintrc.yaml, .eslintrc.yml, .eslintrc.json) are detected. Note: this does not fully eliminate code execution when local configs are enabled — ESLint legacy config fields like extends and parser can still resolve to repo-controlled modules.
  • Plugin resolution: resolvePluginsRelativeTo points ESLint at this adapter's package root so it finds plugins in our node_modules rather than the user's repo.
  • Always-on TS parser override: A .ts/.tsx override with @typescript-eslint/parser is always created when any rules are enabled — not just when @typescript-eslint rules are present. This ensures all plugins (e.g. jsdoc) can analyze TypeScript files correctly, and that core rules like no-redeclare and no-undef are unconditionally disabled for TS files (TypeScript's compiler handles them natively).
  • No project: true: The TS parser override does not use project: true because it fails when no tsconfig.json covers the target files. Most @typescript-eslint rules work without type information; type-aware rules degrade gracefully.
  • Pattern IDs use the same encoding as the codacy-eslint wrapper: ___ then /_ (encode), reverse for decode.
  • The blacklist.ts contains rules known to crash ESLint or produce severe false positives, shared with the ESLint 9 adapter's blacklist.
  • checkAvailability verifies that the loaded ESLint version starts with 8. to prevent accidental use of ESLint 9.
  • install is a no-op — the npm dependency handles installation.