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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@rnx-kit/tools-packages

v0.1.1

Published

tools-packages

Readme

@rnx-kit/tools-packages

Build npm version

This package has utilities for loading base information about packages, retrieved in a PackageInfo type, with a layer of caching that happens automatically, as well as the ability to store additional custom values in the retrieved PackageInfo

Motivation

While loading package.json is pretty quick, this can quickly end up being a redundant operation as there different packages in rnx-kit all need different information from the file. This adds a simple caching layer for retrieving packages so work is not done multiple times.

The packages can also have custom accessors defined that allow storing of additional data in the PackageInfo and because of that, associated with that package in the cache. This might be loading the KitConfig parsing and validating a tsconfig.json file. This package doesn't need to care what is being stored, other packages can add their custom accessors as needed.

Installation

yarn add @rnx-kit/tools-packages --dev

or if you're using npm

npm add --save-dev @rnx-kit/tools-packages

Usage

There are two main parts of this package, helpers for retrieving package info and helpers for accessors.

Types

| Type Name | Description | | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | PlatformInfo | Main returned type for the module. This contains information about the package name, root package path, the loaded package.json in Manifest form, whether or not the package is a workspace, as well as a symbol based index signature for attaching additional information to the type. | | GetPackageValue<T> | Format for a value accessor, used when creating accessors that only need to be loaded once. | | PackageValueAccessors<T> | Typed has/get/set methods to access values attached to the PackageInfo when they may be updated. |

Functions

| Function | Description | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | getPackageInfoFromPath | Given a path to either the root folder of a package, or the package.json for that package, return a loaded PackageInfo for that package. This will attempt to look up the package in the cache, loading it if not found. It will throw an exception on an invalid path. | | getPackageInfoFromWorkspaces | Try to retrieve a PackageInfo by name. This only works for in-workspace packages as module resolution outside of that scope is more complicated. Note that by default this only finds packages previously cached. If the optional boolean parameter is set to true, in the case that the package is not found, all workspaces will be loaded into the cache. This can be expensive though it is a one time cost. | | getRootPackageInfo | Get the package info for the root of the workspaces | | createPackageValueLoader<T> | Create a function which retrieves a cached value from PackageInfo calling the initializer function if it hasn't been loaded yet. This creates an internal symbol for to make the access unique with the supplied friendly name to make debugging easier. | | createPackageValueAccessors | Create three typed functions matching the has/get/set signature associated with a new and contained symbol. This is for accessors that may need to change over time. |