GithubHelp home page GithubHelp logo

npm-cdn's Introduction

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

npm-cdn's People

Contributors

npmcdn-to-unpkg-bot avatar zeke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

npm-cdn's Issues

Help with unknown version

At present, a version number is required to get an npm package. Which means, if I want to get the latest version, I have to go over to npmjs, find the module, and look up what the latest version is.

It would be nice if https://npm-cdn.herokuapp.com/axe-core gave a list of published versions (especially as links) so I didn't have to leave npm-cdn to find that info on npmjs.

incorrect headers on CSS style sheet

This is a really cool project! There is one thing I found that could be improved upon. I tried adding the following URL to a <style> tag.

https://npm-cdn.herokuapp.com/[email protected]/graphiql.css

And I got the following warning in my Chrome console:

Resource interpreted as Stylesheet but transferred with MIME type text/plain: "https://npm-cdn.herokuapp.com/[email protected]/graphiql.css".

It would be nice if it set the correct Content-type header similar to how Raw Git does

What about using the npm client to fetch content?

A thing occurred to me: Instead of using request to download the tarball, maybe npm-cdn could just npm install foo. That would leave the "should I download it or do I already have it on disk?" responsibility in the hands of the npm client...

// @iarna

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.