Code coverage report for 6to5/transformer.js

Statements: 100% (40 / 40)      Branches: 100% (22 / 22)      Functions: 100% (8 / 8)      Lines: 100% (33 / 33)      Ignored: none     

All files » 6to5/ » transformer.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 631   1 1   1 18 18     1 18 33 33   18     1 2394   2376   2376 4752   140442   140442   140442 145596       140442   5670 5670 5670   2910       2376           1 2394   2394 2394   2393 2393   2376    
module.exports = Transformer;
 
var traverse = require("./traverse");
var _        = require("lodash");
 
function Transformer(key, transformer) {
  this.transformer = Transformer.normalise(transformer);
  this.key         = key;
}
 
Transformer.normalise = function (transformer) {
  _.each(transformer, function (fns, type) {
    if (_.isFunction(fns)) fns = { enter: fns };
    transformer[type] = fns;
  });
  return transformer;
};
 
Transformer.prototype.transform = function (file) {
  if (!this.canRun(file)) return;
 
  var transformer = this.transformer;
 
  var build = function (exit) {
    return function (node, parent) {
      // add any node type aliases that exist
      var types = [node.type].concat(traverse.aliases[node.type] || []);
 
      var fns = transformer.all;
 
      _.each(types, function (type) {
        fns = transformer[type] || fns;
      });
 
      // this transformer cannot deal with this node type
      if (!fns) return;
 
      var fn = fns.enter;
      if (exit) fn = fns.exit;
      if (!fn) return;
 
      return fn(node, parent, file);
    };
  };
 
  traverse(file.ast, {
    enter: build(),
    exit:  build(true)
  });
};
 
Transformer.prototype.canRun = function (file) {
  var opts = file.opts;
 
  var blacklist = opts.blacklist;
  if (blacklist.length && _.contains(blacklist, this.key)) return false;
 
  var whitelist = opts.whitelist;
  if (whitelist.length && !_.contains(whitelist, this.key)) return false;
 
  return true;
};