Skip to content

ericcornelissen/depreman

Repository files navigation

npm Deprecation Manager

A manager for npm deprecations.

Turn:

$ npm clean-install
npm warn deprecated [email protected]: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated @humanwhocodes/[email protected]: Use @eslint/config-array instead
npm warn deprecated [email protected]: Rimraf versions prior to v4 are no longer supported
npm warn deprecated @humanwhocodes/[email protected]: Use @eslint/config-array instead
npm warn deprecated [email protected]: Glob versions prior to v9 are no longer supported
npm warn deprecated [email protected]: Glob versions prior to v9 are no longer supported
npm warn deprecated [email protected]: Glob versions prior to v9 are no longer supported
npm warn deprecated @humanwhocodes/[email protected]: Use @eslint/object-schema instead
npm warn deprecated @humanwhocodes/[email protected]: Use @eslint/object-schema instead
npm warn deprecated [email protected]: This version is no longer supported. Please see https://eslint.org/version-support for other options.

Into:

$ depreman
[email protected] ("Glob versions prior to v9 are no longer supported"):
        [email protected] > [email protected]
        [email protected] > [email protected] > [email protected]

Usage

  1. Install:

    npm install depreman
  2. Create an .ndmrc file in the root of your project.

  3. Run:

    npx depreman
  4. Configure.

Configuration

An .ndmrc file is just a JSON file with rules for deprecated dependencies to ignore. The object hierarchy should reflect the dependency hierarchy with keys representing <package>@<version> pairs (semver version ranges supported).

The * wildcard can be used to match 0-or-more dependencies in a hierarchy and the + wildcard can be used to match 1-or-more dependencies in a hierarchy.

Use the "#ignore" directive when a deprecation for a given dependency should be ignored and assign it a reason as a string (or a boolean if you prefer). Optionally, use the "#expire" directive to set a date (YYYY-MM-DD) on which the rule expires.

For example:

{
  "ignore@v0": {
    "#ignore": "ignore deprecations for ignore@v0 but not its (grand)children"
  },

  "not-ignored@v1": {
    "package-a@v2": {
      "#ignore": "ignore deprecations for not-ignored@v1 > package-a@v2"
    },
    "package-b@v3": {
      "#ignore": "and for package-b@v3 only until December 31, 2024",
      "#expire": "2024-12-31"
    }
  },

  "ignore-it@v4": {
    "*": {
      "#ignore": "ignore deprecations in ignore-it@v4 and dependencies with '*'"
    }
  },
  "also-not-ignored@v5": {
    "+": {
      "#ignore": "ignore deprecations *under* also-not-ignored@v5 with '+'"
    }
  },

  "*": {
    "ignored@v6": {
      "#ignore": "ignore deprecations in ignored@v6 anywhere in the tree"
    }
  },

  "no-reason@v7": {
    "#ignore": true
  }
}

License

This software is available under the AGPL-3.0-only license, see LICENSE for the full license text. Documentation is available under the GFDL-1.3-or-later license, see GNU Free Documentation License v1.3 for the full license text.