Code coverage report for father/lib/util.js

Statements: 100% (38 / 38)      Branches: 100% (12 / 12)      Functions: 100% (6 / 6)      Lines: 100% (35 / 35)      Ignored: none     

All files » father/lib/ » util.js
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65    1 1 1 1 1 1   1 1 1 1 1   1 42 42     42 42       3 5 1 1     3     1 42 20   42             1 46 44 44 44 43             1 264     1 190    
'use strict';
 
var fs = require('fs');
var semver = require('semver');
var path = require('path');
var join = path.join;
var dirname = path.dirname;
var debug = require('debug')('father:util');
 
exports.getVersion = getVersion;
exports.getBase = getBase;
exports.resolvePath = resolvePath;
exports.isRelative = isRelative;
exports.winPath = winPath;
 
function getVersion(version, dest) {
  var dirs = fs.readdirSync(dest);
  var versions = dirs
    .filter(semver.valid)
    .sort(semver.rcompare);
  var ret = semver.maxSatisfying(versions, version);
  if (ret) return ret;
 
  // match reference for component
  // tag, branch, hash
  dirs.some(function(ver) {
    if (!semver.valid(ver) && ver === version) {
      ret = ver;
      return true;
    }
  });
  return ret;
}
 
function getBase(pkg) {
  while(pkg.father) {
    pkg = pkg.father;
  }
  return pkg.dest;
}
 
/*
  resolve a `relative` path base on `base` path
*/
 
function resolvePath(relative, base) {
  if (!isRelative(relative) || !base) return relative;
  debug('transport relative id(%s) of basepath(%s)', relative, base);
  relative = join(dirname(base), relative);
  if (isRelative(relative)) throw new Error(winPath(relative) + ' is out of bound');
  return relative;
}
 
/*
  Test filepath is relative path or not
*/
 
function isRelative(filepath) {
  return filepath.charAt(0) === '.';
}
 
function winPath(path) {
  return path.replace(/\\/g, '/');
}