Code coverage report for 6to5/transformers/modules.js

Statements: 100% (57 / 57)      Branches: 100% (30 / 30)      Functions: 100% (7 / 7)      Lines: 100% (55 / 55)      Ignored: none     

All files » 6to5/transformers/ » modules.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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 1211 1 1 1   1 3 3 3 3     1 12   12 9 13 13   13 13 8     13             3           12     1 13 17   17 10 1       9   9 3   6     9   9             7 2       5                 1 16   16 8 1 7 1     8       8 8 6     8 8             1 29   29 16   13     29    
var path = require("path");
var util = require("../util");
var b    = require("ast-types").builders;
var _    = require("lodash");
 
var toModuleNameIdentifier = function (node) {
  var id = node.source.value;
  id = path.basename(id, path.extname(id));
  id = util.camelCase(id);
  return b.identifier(id);
};
 
exports.ImportDeclaration = function (node) {
  var nodes = [];
 
  if (node.specifiers.length) {
    _.each(node.specifiers, function (specifier) {
      var variableName = specifier.name || specifier.id;
      var key          = specifier.id.name;
 
      var templateName = "require-assign";
      if (specifier.type === "ImportSpecifier") {
        if (key !== "default") templateName += "-key";
      }
 
      nodes.push(util.template(templateName, {
        VARIABLE_NAME: variableName.name,
        MODULE_NAME:   node.source.raw,
        KEY:           key
      }));
    });
  } else {
    nodes.push(util.template("require-assign", {
      VARIABLE_NAME: toModuleNameIdentifier(node),
      MODULE_NAME:   node.source.raw
    }));
  }
 
  return nodes;
};
 
var pushSpecifiers = function (node, nodes) {
  _.each(node.specifiers, function (specifier) {
    var variableName = specifier.name || specifier.id;
 
    if (node.source) {
      if (specifier.type === "ExportBatchSpecifier") {
        nodes.push(util.template("exports-wildcard", {
          MODULE_NAME: node.source.raw
        }, true));
      } else {
        var templateName;
 
        if (variableName.name === "default") {
          templateName = "exports-default-require";
        } else {
          templateName = "exports-require-assign";
        }
 
        if (specifier.id.name !== "default") templateName += "-key";
 
        nodes.push(util.template(templateName, {
          VARIABLE_NAME: variableName.name,
          MODULE_NAME:   node.source.raw,
          KEY:           specifier.id
        }, true));
      }
    } else {
      if (variableName.name === "default") {
        nodes.push(util.template("exports-default", {
          VALUE: specifier.id
        }, true));
      } else {
        nodes.push(util.template("exports-assign", {
          VALUE: specifier.id,
          KEY:   variableName
        }, true));
      }
    }
  });
};
 
var pushDeclaration = function (node, nodes) {
  var declar = node.declaration;
 
  if (node.default) {
    if (declar.type === "FunctionDeclaration") {
      declar.type = "FunctionExpression";
    } else if (declar.type === "ClassDeclaration") {
      declar.type = "ClassExpression";
    }
 
    nodes.push(util.template("exports-default", {
      VALUE: declar
    }, true));
  } else {
    var id = declar.id;
    if (declar.type === "VariableDeclaration") {
      id = declar.declarations[0].id;
    }
 
    nodes.push(declar);
    nodes.push(util.template("exports-assign", {
      VALUE: id,
      KEY:   id
    }, true));
  }
};
 
exports.ExportDeclaration = function (node) {
  var nodes = [];
 
  if (node.declaration) {
    pushDeclaration(node, nodes);
  } else {
    pushSpecifiers(node, nodes);
  }
 
  return nodes;
};