All files / src npm-utils.js

56% Statements 14/25
50% Branches 6/12
42.86% Functions 3/7
66.67% Lines 14/21
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 362x 2x 2x   2x 2x 2x 2x 2x 1x 1x         1x           2x   2x                     2x  
const {exec} = require('child_process');
const Promise = require('bluebird');
const {resolver} = require('resolve-package-json');
 
const getVersionList = name => {
  Iif (!name) return Promise.reject(new Error('Empty name given as argument'));
  return Promise.fromCallback(callback =>
    exec(`npm show ${name} versions --json`, (err, stdout, stderr) => {
      if (err) {
        Eif (/Registry returned 404 for GET on/.test(stderr) || /404 Not found/.test(stderr)) {
          return callback(new Error(`Unknown Package ${name}`));
        } else {
          return callback(err);
        }
      } else {
        return callback(null, JSON.parse(stdout));
      }
    })
  );
};
 
const shouldResolve = pkg => /.*@([~^]|.*x)/.test(pkg);
 
const resolveVersionRange = pkg => {
  if (!shouldResolve(pkg)) return Promise.resolve(pkg);
  return Promise.fromCallback(cb => {
    const [packageName, version] = pkg.split('@');
    resolver({[packageName]: version}, function(err, result) {
      if (err) return cb(err);
      return cb(null, `${packageName}@${result.dependencies[packageName].version}`);
    });
  });
};
 
module.exports = {getVersionList, shouldResolve, resolveVersionRange};