Skip to content

A tool for helping to understand APIs exported and consumed by NPM packages (or any TypeScript code).

License

Notifications You must be signed in to change notification settings

grafana/levitate

Folders and files

NameName
Last commit message
Last commit date
Jan 22, 2025
Jan 22, 2025
Feb 18, 2025
Feb 22, 2024
Jan 24, 2025
Jan 24, 2025
Jan 22, 2025
Jan 22, 2025
Jul 25, 2022
Sep 14, 2022
Jan 22, 2025
Aug 26, 2022
Feb 22, 2024
Apr 21, 2022
Aug 11, 2023
Oct 4, 2022
Mar 3, 2025
Jan 17, 2024
Feb 22, 2024
Feb 22, 2024
Mar 7, 2025

🔮 Levitate

npm version npm downloads CI prettier TypeScript

A tool for helping to understand APIs exported and consumed by NPM packages (or any TypeScript code).

Usage

Compare exports of different package versions

# Compare exports of different versions of a package
npx @grafana/levitate compare \
    --prev @grafana/[email protected] \
    --current @grafana/ui@canary

List imports

# List the imports used by a program
npx @grafana/levitate list-imports \
    --path <PATH-TO-A-PACKAGE>/module.ts \
    --filters "@common/pages" "@grafana/data" \
    --verbose

List exports

# List the exports of a compiled package
npx @grafana/levitate list-exports \
    --path <PATH-TO-A-PACKAGE>/index.d.ts

Check compatibility between a module and a package

To check the compatibility of code using a specific version of a package (e.g.: @grafana/[email protected]) against another version of the same package (e.g. @grafana/[email protected]).

# Check if the current module.ts usage of @grafana/data is
# compatible with the latest version of it
npx @grafana/levitate is-compatible \
    --path <PATH-TO-A-PACKAGE>/module.ts \
    --target "@grafana/data@latest"

Ignore specific exports changes

To ignore changes (add, change, remove) from specific export names you can create a .levignore.js file in the same directory where you invoke levitate.

The format of this file should be as follows:

module.exports = {
  removals: [
    // each entry is a regex
    /Sample\.ignoreThisOne/,
    /Sample\.ignoreThisOneToo/,
    /Sample.*\b/,
    'Sample.ignoreThisOneToo', // strings are converted to regex to match exact
  ],
  changes: [
    //...
  ],
  additions: [
    //...
  ],
};

Note:

  • Levitate will ignore symbols matching the regexes in any of the packages it inspects. If several packages export the same symbol name, they all will be ignored.
  • This only affects the compare and is-compatible commands. It doesn't affect the list-imports or list-exports commands.
  • You should locate your .levignore.js file in the same directory where you invoke levitate.

Contributing

If you are interested in contributing to the Levitate project please read the Contributing guide.

About

A tool for helping to understand APIs exported and consumed by NPM packages (or any TypeScript code).

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published