Code coverage report for 6to5/transformation/transformers/es6-constants.js

Statements: 97.06% (33 / 34)      Branches: 90.91% (20 / 22)      Functions: 100% (8 / 8)      Lines: 100% (29 / 29)      Ignored: none     

All files » 6to5/transformation/transformers/ » es6-constants.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 551 1 1   1         990   990 99 75 6   6       990 99     990 2420 23 23 23 23 23   23     23     23 23       990   15 475 429   387 76        
var traverse = require("../../traverse");
var t        = require("../../types");
var _        = require("lodash");
 
exports.Program =
exports.BlockStatement =
exports.ForInStatement =
exports.ForOfStatement =
exports.ForStatement = function (node, parent, file) {
  var constants = {};
 
  var check = function (parent, names) {
    _.each(names, function (nameNode, name) {
      if (!_.has(constants, name)) return;
      Iif (parent && t.isBlockStatement(parent) && parent !== constants[name]) return;
 
      throw file.errorWithNode(nameNode, name + " is read-only");
    });
  };
 
  var getIds = function (node) {
    return t.getIds(node, true, ["MemberExpression"]);
  };
 
  _.each(node.body, function (child, parent) {
    if (child && t.isVariableDeclaration(child, { kind: "const" })) {
      _.each(child.declarations, function (declar) {
        _.each(getIds(declar), function (nameNode, name) {
          var names = {};
          names[name] = nameNode;
          check(parent, names);
 
          constants[name] = parent;
        });
 
        declar._ignoreConstant = true;
      });
 
      child._ignoreConstant = true;
      child.kind = "let";
    }
  });
 
  if (_.isEmpty(constants)) return;
 
  traverse(node, function (child, parent) {
    if (child._ignoreConstant) return;
    if (t.isVariableDeclaration(child)) return;
 
    if (t.isVariableDeclarator(child) || t.isDeclaration(child) || t.isAssignmentExpression(child)) {
      check(parent, getIds(child));
    }
  });
};