dep-radius

What radius cannot see

What radius cannot see, and what to do about it.

Sometimes radius can't see how your code uses a package. Then it says so, and the update gets review instead of quiet. In the terminal, these are under "cannot see how you use these". In JSON, they're in usage.cannotSee.

Used without a name in your code

KindIn plain wordsTypical example
script-binrun from scripts in package.json"lint": "eslint ."
config-referencenamed in a config filea plugin listed in .babelrc
side-effect-importimported only for side effectsimport "reflect-metadata"
css-importimported from CSS@import "tailwindcss"
convention-frameworka framework used through file conventionsnext, with its app/ folder
ambient-typestypes that apply globally@types/node

radius can't know which part of the package you rely on here. Your build and tests can.

Usage radius can't follow

KindIn plain words
namespace-escapethe whole module is passed around (doSomething(z))
computed-memberread with computed keys (lib[name]())
dynamic-import-escapeloaded with import() and passed on
prefix-dynamic-importloaded by a computed subpath (import(`lodash/${fn}`))
public-reexportre-exported to your own consumers, who may use anything
unresolved-local-importreached through a local import that didn't resolve
derived-escapea value built from it travels through too many files
unparseable-fileused in a file that didn't parse
unresolved-against-surfacea name you use isn't in its types at all

For the whole project

Some things hide usage across the whole project. They're reported once, at the top (in JSON: wholeProject), without changing every package's answer:

  • require(someVariable) and import(someVariable) with a non-literal name,
  • generated files that were skipped,
  • files that didn't parse.

Limits

  • radius only knows what release notes say. If a function works differently and no note says so, radius can't know.
  • It doesn't type-check your code. A member used through a callback, or through a value radius didn't follow, is matched by name only ("possibly").
  • A local variable with the same name as an import isn't analysed.
  • A package whose types come from another package is judged from its notes only.
  • Release notes come from GitHub and the package's own changelog. GitLab and others aren't read yet.
  • Dependencies of your dependencies aren't checked. Your lockfile handles that.

Every run lists the limits that applied. The benchmark shows what these limits cost on real release notes.

On this page