Code coverage report for 6to5/lib/6to5/transformation/transformers/optional-core-aliasing.js

Statements: 91.89% (34 / 37)      Branches: 90.32% (28 / 31)      Functions: 100% (4 / 4)      Lines: 100% (31 / 31)      Ignored: none     

All files » 6to5/lib/6to5/transformation/transformers/ » optional-core-aliasing.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 66 67 681 1 1 1 1   1 24     1                 1   1   5       5   378   378   35 35   35   35 1 1   343   4 339     28   8 8 6   3 3 3   3                  
var traverse = require("../../traverse");
var util     = require("../../util");
var core     = require("core-js/library");
var t        = require("../../types");
var _        = require("lodash");
 
var coreHas = function (node) {
  return node.name !== "_" && _.has(core, node.name);
};
 
var ALIASABLE_CONSTRUCTORS = [
  "Symbol",
  "Promise",
  "Map",
  "WeakMap",
  "Set",
  "WeakSet"
];
 
exports.optional = true;
 
exports.ast = {
  enter: function (ast, file) {
    file._coreId = file.addImport("core-js/library", "core");
  },
 
  exit: function (ast, file) {
    traverse(ast, {
      enter: function (node, parent) {
        var prop;
 
        if (t.isMemberExpression(node) && t.isReferenced(node, parent)) {
          // Array.from -> _core.Array.from
          var obj = node.object;
          prop = node.property;
 
          Iif (!t.isReferenced(obj, node)) return;
 
          if (!node.computed && coreHas(obj) && _.has(core[obj.name], prop.name)) {
            this.skip();
            return t.prependToMemberExpression(node, file._coreId);
          }
        } else if (t.isIdentifier(node) && !t.isMemberExpression(parent) && t.isReferenced(node, parent) && _.contains(ALIASABLE_CONSTRUCTORS, node.name)) {
          // Symbol() -> _core.Symbol(); new Promise -> new _core.Promise
          return t.memberExpression(file._coreId, node);
        } else if (t.isCallExpression(node)) {
          // arr[Symbol.iterator]() -> _core.$for.getIterator(arr)
 
          if (node.arguments.length) return;
 
          var callee = node.callee;
          if (!t.isMemberExpression(callee)) return;
          if (!callee.computed) return;
 
          prop = callee.property;
          Iif (!t.isIdentifier(prop.object, { name: "Symbol" })) return;
          Iif (!t.isIdentifier(prop.property, { name: "iterator" })) return;
 
          return util.template("corejs-iterator", {
            CORE_ID: file._coreId,
            VALUE:   callee.object
          });
        }
      }
    });
  }
};