Code coverage report for 6to5/transformers/computed-property-names.js

Statements: 100% (30 / 30)      Branches: 100% (12 / 12)      Functions: 100% (3 / 3)      Lines: 100% (29 / 29)      Ignored: none     

All files » 6to5/transformers/ » computed-property-names.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 621 1 1   1 33   33   33 40 10 10 10   30       33   8   8 1 7 6     8   8 7     8   8         8 8   8   8 10                     8    
var util = require("../util");
var b    = require("recast").types.builders;
var _    = require("lodash");
 
exports.ObjectExpression = function (node, parent, file) {
  var hasComputed = false;
 
  var computed = [];
 
  node.properties = node.properties.filter(function (prop) {
    if (prop.computed) {
      hasComputed = true;
      computed.unshift(prop);
      return false;
    } else {
      return true;
    }
  });
 
  if (!hasComputed) return;
 
  var objIdNode;
 
  if (parent.type === "AssignmentExpression") {
    objIdNode = parent.left;
  } else if (parent.type === "VariableDeclarator") {
    objIdNode = parent.id;
  }
 
  var objId = "ref";
 
  if (objIdNode && objIdNode.type === "Identifier") {
    objId = objIdNode.name;
  }
 
  objId = b.identifier(file.generateUid(objId));
 
  var container = util.template("function-return-obj", {
    KEY: objId,
    OBJECT: node
  });
 
  var containerCallee = container.callee;
  var containerBody = containerCallee.body.body;
 
  containerCallee._aliasFunction = "arrows";
 
  _.each(computed, function (prop) {
    containerBody.unshift(
      b.expressionStatement(
        b.assignmentExpression(
          "=",
          b.memberExpression(objId, prop.key, true),
          prop.value
        )
      )
    );
  });
 
  return container;
};