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 🙏

© 2024 – Pkg Stats / Ryan Hefner

read-package-json-fast

v4.0.0

Published

Like read-package-json, but faster

Downloads

27,584,967

Readme

read-package-json-fast

Like read-package-json, but faster and more accepting of "missing" data.

This is only suitable for reading package.json files in a node_modules tree, since it doesn't do the various cleanups, normalization, and warnings that are beneficial at the root level in a package being published.

USAGE

const rpj = require('read-package-json-fast')

// typical promisey type API
rpj('/path/to/package.json')
  .then(data => ...)
  .catch(er => ...)

// or just normalize a package manifest
const normalized = rpj.normalize(packageJsonObject)

Errors raised from parsing will use json-parse-even-better-errors, so they'll be of type JSONParseError and have a code: 'EJSONPARSE' property. Errors will also always have a path member referring to the path originally passed into the function.

Indentation

To preserve indentation when the file is saved back to disk, use data[Symbol.for('indent')] as the third argument to JSON.stringify, and if you want to preserve windows \r\n newlines, replace the \n chars in the string with data[Symbol.for('newline')].

For example:

const data = await readPackageJsonFast('./package.json')
const indent = Symbol.for('indent')
const newline = Symbol.for('newline')
// .. do some stuff to the data ..
const string = JSON.stringify(data, null, data[indent]) + '\n'
const eolFixed = data[newline] === '\n' ? string
  : string.replace(/\n/g, data[newline])
await writeFile('./package.json', eolFixed)

Indentation is determined by looking at the whitespace between the initial { and the first " that follows it. If you have lots of weird inconsistent indentation, then it won't track that or give you any way to preserve it. Whether this is a bug or a feature is debatable ;)

WHAT THIS MODULE DOES

  • Parse JSON
  • Normalize bundledDependencies/bundleDependencies naming to just bundleDependencies (without the extra d)
  • Handle true, false, or object values passed to bundleDependencies
  • Normalize funding: <string> to funding: { url: <string> }
  • Remove any scripts members that are not a string value.
  • Normalize a string bin member to { [name]: bin }.
  • Fold optionalDependencies into dependencies.
  • Set the _id property if name and version are set. (This is load-bearing in a few places within the npm CLI.)

WHAT THIS MODULE DOES NOT DO

  • Warn about invalid/missing name, version, repository, etc.
  • Extract a description from the README.md file, or attach the readme to the parsed data object.
  • Read the HEAD value out of the .git folder.
  • Warn about potentially typo'ed scripts (eg, tset instead of test)
  • Check to make sure that all the files in the files field exist and are valid files.
  • Fix bundleDependencies that are not listed in dependencies.
  • Fix dependencies fields that are not strictly objects of string values.
  • Anything involving the directories field (ie, bins, mans, and so on).