All files fetch-package-stats.js

100% Statements 32/32
100% Branches 9/9
100% Functions 7/7
100% Lines 27/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 37 38 39 40 41 42 43 44 45 46 47 48 495x 5x   5x   5x 19x 18x 16x     16x   16x   2x 2x 1x   1x   5x 5x 5x   5x 5x 5x 4x     5x 3x 5x     5x 2x 1x     5x              
const fs = require('fs');
const fetch = require('node-fetch');
 
const {getVersionList, resolveVersionRange, getDependencyList} = require('./npm-utils');
 
const fetchPackageStats = async name => {
  if (!name) throw new Error('Empty name given as argument');
  const pkg = await resolveVersionRange(name);
  const res = await fetch(`https://bundlephobia.com/api/size?package=${pkg}`, {
    headers: {'User-Agent': 'bundle-phobia-cli', 'X-Bundlephobia-User': 'bundle-phobia-cli'}
  });
  const json = await res.json();
 
  if (!json.error) return json;
 
  const errMessage = json.error.message;
  if (errMessage.startsWith('This package has not been published with this particular version.'))
    throw new Error(errMessage.replace(/`<code>|<\/code>`/g, ''));
 
  throw new Error(errMessage);
};
const fetchPackagesStats = names => Promise.all(names.map(fetchPackageStats));
const fetchPackageJsonStats = packageDetails =>
  fetchPackagesStats(getDependencyList(packageDetails));
 
const selectVersions = (versionList, limit) => {
  versionList.reverse();
  if (limit <= 0) return versionList;
  else return versionList.slice(0, limit);
};
 
const getPackageVersionList = async (name, limit = 8) => {
  const versionList = await getVersionList(name);
  return selectVersions(versionList, limit).map(version => `${name}@${version}`);
};
 
const getPackagesFromPackageJson = async pkg => {
  const packageContent = JSON.parse(fs.readFileSync(pkg));
  return getDependencyList(packageContent);
};
 
module.exports = {
  fetchPackageStats,
  fetchPackageJsonStats,
  selectVersions,
  getPackageVersionList,
  getPackagesFromPackageJson
};