Code coverage report for src/utils.js

Statements: 98.08% (51 / 52)      Branches: 84.62% (22 / 26)      Functions: 100% (10 / 10)      Lines: 98% (49 / 50)      Ignored: none     

All files » src/ » utils.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  1   1 5 1176 857 857 841   16 16 45           1 1 31     1 126 25 25     25     126     1 224     1 28     1 40 40       1 1   1   207               207 207 207 207   207   690   509 509   509   417   92   46       46 46 46 46           161     1   1  
"use strict";
var utils = {};
 
['forEach', 'some', 'every', 'filter', 'map'].forEach(function(fnName){
  utils[fnName] = function(arr, fn, context){
    if (!arr || typeof arr == 'string') return arr;
    context = context || this;
    if (arr[fnName]){
      return arr[fnName](fn, context);
    } else {
      var keys = Object.keys(arr);
      return keys[fnName](function(key){
        return fn.call(context, arr[key], key, arr);
      }, context);
    }
  };
});
 
var number = 0;
utils.guid = function(){
  return number++;
};
 
utils.mixin = function (to, from){
  utils.forEach(from, function(val, key){
    var toString = {}.toString.call(val);
    Iif (utils.isArray(val) || utils.isObject(val)) {
      to[key] = utils.mixin(val, to[key] || {});
    } else {
      to[key] = val;
    }
  });
  return to;
};
 
utils.isArray = function(obj){
  return {}.toString.call(obj) === '[object Array]';
};
 
utils.isObject = function(obj){
  return {}.toString.call(obj) === '[object Object]';
};
 
utils.indexOf = function(elem, arr){
  Eif (utils.isArray(arr)) {
    return arr.indexOf(elem);
  }
};
 
utils.keys = Object.keys;
utils.now  = Date.now;
 
function makeLevel(block, index){
 
  var blockTypes = {
    'if': 1,
    'foreach': 1,
    'macro': 1,
    'noescape': 1,
    'define': 1
  };
 
  var len = block.length;
  index = index || 0;
  var ret = [];
  var ignore = index - 1;
 
  for (var i = index; i < len; i++) {
 
    if (i <= ignore) continue;
 
    var ast = block[i];
    var type = ast.type;
 
    if (!blockTypes[type] && type !== 'end') {
 
      ret.push(ast);
 
    } else if (type === 'end') {
 
      return {arr: ret, step: i};
 
    } else {
 
      var _ret = makeLevel(block, i + 1);
      ignore = _ret.step;
      _ret.arr.unshift(block[i]);
      ret.push(_ret.arr);
 
    }
 
  }
 
  return ret;
}
 
utils.makeLevel = makeLevel;
 
module.exports = utils;