All files / lib fetch-package-stats.js

88% Statements 22/25
85.71% Branches 6/7
62.5% Functions 5/8
86.36% Lines 19/22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 371x 1x   1x 1x   1x 3x 2x   2x       2x   2x 1x       1x 3x 3x 2x     1x           1x 1x 1x  
const fetch = require('node-fetch');
const Promise = require('bluebird');
 
fetch.Promise = Promise;
const {getVersionList, resolveVersionRange} = require('./npm-utils');
 
const fetchPackageStats = name => {
  if (!name) return Promise.reject(new Error('Empty name given as argument'));
  return resolveVersionRange(name)
    .then(pkg =>
      fetch(`https://bundlephobia.com/api/size?package=${pkg}`, {
        headers: {'User-Agent': 'bundle-phobia-cli', 'X-Bundlephobia-User': 'bundle-phobia-cli'}
      })
    )
    .then(res => res.json())
    .then(json => {
      if (json.error) throw new Error(json.error.message);
      return json;
    });
};
 
const selectVersions = (versionList, limit) => {
  versionList.reverse();
  if (limit <= 0) return versionList;
  else return versionList.slice(0, limit);
};
 
const getPackageVersionList = (name, limit = 8) => {
  return getVersionList(name)
    .then(versionList => selectVersions(versionList, limit))
    .map(version => `${name}@${version}`);
};
 
module.exports.fetchPackageStats = fetchPackageStats;
module.exports.selectVersions = selectVersions;
module.exports.getPackageVersionList = getPackageVersionList;