Code coverage report for 6to5/file.js

Statements: 90.67% (68 / 75)      Branches: 63.64% (14 / 22)      Functions: 100% (12 / 12)      Lines: 91.67% (66 / 72)      Ignored: none     

All files » 6to5/ » file.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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 1411   1   1 1 1 1 1   1 197 196   196 196 196     1 197   197               197         197 197   196     1 196   196         196       196     1 196 196             196     1 39 39   25 25       25     1 196 196   196   196 195 186       1 195   195   195 4528       1 186 186   186   164         164 1     164     1   176     176     176 33     176 176   176 176 176 176    
module.exports = File;
 
var SHEBANG_REGEX = /^\#\!.*/;
 
var transform = require("./transform");
var generate  = require("./generator");
var util      = require("./util");
var b         = require("./builders");
var _         = require("lodash");
 
function File(opts) {
  this.opts            = File.normaliseOptions(opts);
  this.moduleFormatter = this.getModuleFormatter(opts.modules);
 
  this.declarations = {};
  this.uids         = {};
  this.ast          = {};
}
 
File.normaliseOptions = function (opts) {
  opts = opts || {};
 
  _.defaults(opts, {
    blacklist: [],
    whitelist: [],
    sourceMap: false,
    filename:  "unknown",
    modules:   "common"
  });
 
  _.defaults(opts, {
    sourceFileName: opts.filename,
    sourceMapName:  opts.filename
  });
 
  transform._ensureTransformerNames("blacklist", opts.blacklist);
  transform._ensureTransformerNames("whitelist", opts.whitelist);
 
  return opts;
};
 
File.prototype.getModuleFormatter = function (type) {
  var ModuleLoader = transform.moduleFormatters[type];
 
  Iif (!ModuleLoader) {
    var loc = util.resolve(type);
    if (loc) ModuleLoader = require(loc);
  }
 
  Iif (!ModuleLoader) {
    throw new ReferenceError("unknown module formatter type " + type);
  }
 
  return new ModuleLoader(this);
};
 
File.prototype.parseShebang = function (code) {
  var shebangMatch = code.match(SHEBANG_REGEX);
  Iif (shebangMatch) {
    this.shebang = shebangMatch[0];
 
    // remove shebang
    code = code.replace(SHEBANG_REGEX, "");
  }
 
  return code;
};
 
File.prototype.addDeclaration = function (name) {
  var declar = this.declarations[name];
  if (declar) return declar.uid;
 
  var uid = b.identifier(this.generateUid(name));
  this.declarations[name] = {
    uid: uid,
    node: util.template(name)
  };
  return uid;
};
 
File.prototype.parse = function (code) {
  var self = this;
  this.code = code;
 
  code = this.parseShebang(code);
 
  return util.parse(this.opts, code, function (tree) {
    self.transform(tree);
    return self.generate();
  });
};
 
File.prototype.transform = function (ast) {
  this.ast = ast;
 
  var self = this;
 
  _.each(transform.transformers, function (transformer) {
    transformer.transform(self);
  });
};
 
File.prototype.generate = function () {
  var opts = this.opts;
  var ast  = this.ast;
 
  var result = generate(this.code, ast, opts);
 
  Iif (this.shebang) {
    // add back shebang
    result.code = this.shebang + result.code;
  }
 
  if (opts.sourceMap === "inline") {
    result.code += "\n" + util.sourceMapToComment(result.map);
  }
 
  return result;
};
 
File.prototype.generateUid = function (name) {
  // replace all non-valid identifiers with dashes
  name = name.replace(/[^a-zA-Z0-9]/g, "-");
 
  // remove all dashes and numbers from start of name
  name = name.replace(/^[-0-9]+/, "");
 
  // camel case
  name = name.replace(/[-_\s]+(.)?/g, function (match, c) {
    return c ? c.toUpperCase() : "";
  });
 
  var uids = this.uids;
  var i = uids[name] || 1;
 
  var id = name;
  if (i > 1) id += i;
  uids[name] = i + 1;
  return "_" + id;
};