GithubHelp home page GithubHelp logo

nice-registry [EXPERIMENTAL] πŸ”¬

A stateless proxy server to the npm registry that serves fancied up package metadata.

How it Works

This is what the server does when you fetch a package:

Raw Registry Data

First, the raw package metadata is fetched from registry.npmjs.com. This is the only network request made per package.

Dependents

The dependent-packages module adds dependency info for the package, without making a network request:

  • directDependents
  • directDependentsCount
  • directDevDependents
  • directDevDependentsCount
  • totalDirectDependentsCount

Downloads

The download-counts adds a averageDownloadsPerDay property to the package. This is also added without making a network request/

Owners

The owners and owner-profiles packages are used to create an owners array which includes the following metadata for each npm user, as available:

  • name - full name
  • email - public email address
  • homepage - a URL
  • github - GitHub handle
  • twitter - Twitter handle
  • gravatar - HTTPS gravatar url
  • packageCount - how many packages thes user owns

No network requests are made here either.

Niceties

Lastly, the resulting package object is turned into a [nice package], which has these qualities:

  • uses normalize-package-data as a baseline for cleanup, then:
  • uses the doc['dist-tags'].latest as the baseline for package metadata
  • derives starsCount from the users object
  • derives a versions array from the time object
  • renames _npmUser to lastPublisher, because it's a more intuitive name.
  • renames maintainers to owners, for consistency with the npm's CLI commands.
  • normalizes GitHub repository URLs to https format
  • moves internal bookkeeping properties like _id and _from into an other object that can easily be omitted.

HTTP API

The following routes are supported:

GET /package/:name

Fetches a single package. The following query params are allowed:

Examples:

GET /packages

Fetches multiple packages by name. The following query params are allowed:

  • names (required) - a comma-delimited string of package names to fetch
  • pick - a comma-delimited string of properties to include in the response.
  • omit - a comma-delimited string of properties to omit from the response.

Examples:

Public Server

There's a public instance running on Heroku.

Example URL: http://nice-registry.herokuapp.com/package/cheerio?omit=readme,versions,other,directDependents,

Running Your Own Instance

This server's design follows the 12 Factor development methodology popularized by Heroku. It is stateless: that is, it does not include a database, nor does it write to the filesystem.

Each package request makes just one network call, and that is to fetch the main package data from the npm registry. Supplementary data for download counts, dependents, owner profiles, etc, is provided by offline datasets that are automatically updated and published to npm by bots.

This server can optional cache responses in Redis. If you specify a REDIS_URL in the environment, then it will be used. If you don't, it won't. No configuration required.

Setting up your own instance on Heroku only requires a few commands:

git clone https://github.com/nice-registry/nice-registry
cd nice-registry
heroku create my-nice-registry
heroku addons:add heroku-redis
git push heroku master

Tests

npm install
npm test

License

MIT

nice-registry's Projects

all-the-packages icon all-the-packages

:package: All the npm registry metadata as an offline event stream. [DEPRECATED]

cli-packages icon cli-packages

🐚 Names of all npm packages that have a command-line interface. Sorted by download count, descending.

dependent-counts icon dependent-counts

πŸ’― Get counts of how many packages depend on the given package. Works offline.

dependent-packages icon dependent-packages

πŸ”— Direct dependents and devDependents of every package in the npm registry. Works offline.

depnames icon depnames

Fetch a list of dependency names for a given npm package

download-counts icon download-counts

πŸ’― Average daily download counts for every npm package. Works offline.

ghub.io icon ghub.io

πŸ€Έβ€β™€οΈ Redirect to an npm package's repository page

heroku-log-s3 icon heroku-log-s3

log drain from heroku to s3. grep by line prefix and buffer upload to s3 as timestamped files

nice-package icon nice-package

πŸ“¦ Clean up messy package metadata from the npm registry

nice-registry icon nice-registry

🎁 A proxy to the npm registry that serves up nice package metadata.

nock-modules icon nock-modules

a list of javascript modules that extend or depend on nock

npm-api-client icon npm-api-client

πŸ’­ A self-generating client for npm's new (nonexistent) registry API (Experimental)

npm-cdn icon npm-cdn

⬇️ [DEPRECATED] A webservice that dishes out files from npm packages

owner-profiles icon owner-profiles

βœ‰οΈ Names, emails, GitHub handles, and more for every npm package author

owners icon owners

πŸ’ Usernames and package counts for every npm package author. Works offline. Updated daily.

package-stream icon package-stream

🚰 An endless stream of clean package data from the npm registry.

sourceranks icon sourceranks

libraries.io SourceRank data for every package in the npm registry

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.