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-unsupported-tools

v0.10.1

Published

Generated manifest of Codacy Cloud tools without a local analyzer (descriptors + patterns)

Readme

@codacy/tools-unsupported-tools

Table of Contents

Overview

This package holds a generated, committed manifest of every Codacy Cloud tool that does not have a local analyzer adapter in this CLI — the "unsupported" (cloud-only) tools. It lets the CLI treat those tools as first-class citizens of the configuration and of the info / analyze / init flows, even though they are never executed locally.

What "unsupported" means

A tool is tracked here when it is in the Codacy catalog (/api/v3/tools), has no local adapter (its UUID is not referenced by any sibling tool package's prefetch script), and is trackable — i.e. not deprecated and not client-side/standalone-only (those run only in the customer environment).

Descriptors carry unsupported: true, which is how the rest of the CLI tells them apart from real adapters.

Contents

  • src/descriptors.json — one AdapterDescriptor per tool (unsupported: true, uuid set, supportedRunners: ["container"]).
  • src/patterns/<toolId>.json — that tool's full pattern set (same shape as a supported adapter's patterns.json). Tools with no patterns have no file.
  • src/index.ts — exports unsupportedDescriptors (eager, tiny) and loadUnsupportedPatterns(toolId) (lazy disk read, cached).
  • src/framework-mappings.json — hand-curated framework matching rules (see below).

Framework mappings

Several cloud-only tools ship framework-specific patterns (PHPCS → CakePHP/WordPress/Drupal/Magento/ Symfony; dartanalyzer → Flutter/Angular; SonarCSharp → ASP.NET Core/Entity Framework/xUnit/…; CodeNarc → Grails/Spock/…). src/framework-mappings.json maps tool ID → FrameworkMappings so init --auto can include those patterns only when the framework is actually detected (and exclude them otherwise), exactly like supported tools.

  • It is hand-curated and committed — unlike descriptors.json/patterns/, it is not touched by generate, so it survives regeneration. index.ts merges it onto each descriptor's frameworkMappings at load time.
  • Choose the mechanism per tool from its pattern shape: prefixes when pattern IDs are namespaced by framework (e.g. PHPCS_CakePHP_), tags otherwise (e.g. flutter, aspnetcore, grails).
  • Each key must equal the discover catalog displayName for that framework (packages/runner/src/discover-catalog.ts) — that's what auto-init matches against. Add a catalog entry + manifest parser there if discover can't yet detect the framework.
  • test/framework-mappings.test.ts enforces that every key maps to a real tool, the merge applied, and every prefix/tag still matches ≥1 committed pattern (guards against drift after regeneration).

Regenerating the manifest

From the repo root:

pnpm generate-unsupported

or from this package:

pnpm generate

The script (scripts/generate.mjs) fetches the catalog, subtracts locally supported tools (by UUID, read from sibling prefetch scripts — no list to keep in sync), filters out deprecated/client-side tools, and rewrites descriptors.json + patterns/. Commit the result. On network failure it warns and exits 0, leaving committed files untouched.

Run this whenever Codacy adds/removes tools or you implement a new local adapter (which should then disappear from this manifest on the next regeneration).

How it's consumed

  • packages/cli/src/index.ts registers every descriptor via registerUnsupportedTool() so they appear in getRegisteredDescriptors().
  • init --auto calls loadUnsupportedPatterns() to fill cloud-only tools offline.
  • init --remote / --default fetch patterns from the API at runtime, so they do not read this package's pattern files — only its descriptors/registration.

Development

pnpm build   # tsup bundle + copy src/patterns → dist/patterns
pnpm test    # manifest shape + drift invariants
pnpm lint

loadUnsupportedPatterns reads dist/patterns/<toolId>.json at runtime (__dirname-relative) and src/patterns/ during tests.

Notes for maintainers

  • The patterns directory is recreated on every generate run so removed tools don't leave stale files behind.
  • The package is named with the @codacy/tools- prefix on purpose: the CLI keeps those external from its bundle, so __dirname resolves to this package's own dist/ and the pattern files are found.
  • filePatterns is ["*"] for all entries — unsupported tools never route files locally, so the value is cosmetic.