Code coverage report for 6to5/transformation/transformers/es7-object-spread.js

Statements: 100% (26 / 26)      Branches: 100% (10 / 10)      Functions: 100% (4 / 4)      Lines: 100% (24 / 24)      Ignored: none     

All files » 6to5/transformation/transformers/ » es7-object-spread.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    1 1   1 136 136 215 3 3     136   3 3   3 7 4 4     3 8 4 4   4       3   3 1     3    
// https://github.com/sebmarkbage/ecmascript-rest-spread
 
var t = require("../../types");
var _ = require("lodash");
 
exports.ObjectExpression = function (node) {
  var hasSpread = false;
  _.each(node.properties, function (prop) {
    if (t.isSpreadProperty(prop)) {
      hasSpread = true;
      return false;
    }
  });
  if (!hasSpread) return;
 
  var args = [];
  var props = [];
 
  var push = function () {
    if (!props.length) return;
    args.push(t.objectExpression(props));
    props = [];
  };
 
  _.each(node.properties, function (prop) {
    if (t.isSpreadProperty(prop)) {
      push();
      args.push(prop.argument);
    } else {
      props.push(prop);
    }
  });
 
  push();
 
  if (!t.isObjectExpression(args[0])) {
    args.unshift(t.objectExpression([]));
  }
 
  return t.callExpression(t.memberExpression(t.identifier("Object"), t.identifier("assign")), args);
};