Вход Регистрация
Файл: error-kitty/lib/error-kitty/stacks/stack.js
Строк: 80
<?php
module
.exports = Stack;

var 
StackFrame = require("./frame");
var 
stacks     = require("./index");
var 
_          = require("lodash");

function 
Stack(err, frames) {
  
this.err = err;
  
this.frames = err.frames = this.parseFrames(err, frames);
}

Stack.prototype.parseFrames = function (err, frames) {
  var 
manipulateEvals = err.manipulateEvals || [];

  
frames = frames || [];
  if (
err.frameOffset) frames = frames.slice(err.frameOffset);
  
frames = frames.slice(0, 15);

  
this.shareWithFrame(frames[0]);

  
frames = frames.map(function (frame) {
    var 
stackFrame = new StackFrame(frame);

    if (
frame.isEval()) {
      var 
manipulateFrame = manipulateEvals.shift();
      if (
manipulateFrame) manipulateFrame(err, stackFrame);
    }

    return 
stackFrame;
  });

  return 
frames;
};

Stack.prototype.shareWithFrame = function (frame) {
  if (!
frame) return;

  var 
err = this.err;

  
_.each(["file", "locals", "filename", "colNumber", "lineNumber",
          
"functionName", "ignoreMap"], function (key) {
    var 
val = err[key];
    if (
val == null) val = frame[key];
    
err[key] = frame[key] = val;
  });
};

Stack.prototype.buildAssertionMessage = function () {
  var 
err = this.err;

  var 
replacer = function (key, value) {
    if (
value === undefined) {
      return 
"" + value;
    }
    if (
typeof value === "number" && (isNaN(value) || !isFinite(value))) {
      return 
value.toString();
    }
    if (
typeof value === "function" || value instanceof RegExp) {
      return 
value.toString();
    }
    return 
value;
  };

  var 
truncate = function (s, n) {
    if (
typeof s == "string") {
      return 
s.length < n ? s : s.slice(0, n);
    } else {
      return 
s;
    }
  };

  return [
    
truncate(JSON.stringify(err.actual, replacer), 128),
    
err.operator,
    
truncate(JSON.stringify(err.expected, replacer), 128)
  ].
join(" ");
};

Stack.prototype.buildMessage = function () {
  var 
err = this.err;
  var 
msg = err.message;

  if (
err.name === "AssertionError") {
    
msg = this.buildAssertionMessage();
  }

  
msg = JSON.stringify(msg);

  return 
msg;
};

Stack.prototype.toString = function () {
  var 
frames = this.frames.slice();
  var 
first  = frames.shift();
  var 
err    = this.err;

  var 
result = [
    
err.name + ":",
    
this.buildMessage(),
    
first && first.buildMessage()
  ].
join(" ");

  if (
first && first.fileExists()) {
    
result += stacks(first.getHighlightedFile(), first.lineNumber,
                     
first.colNumber);
  }

  
_.each(frames, function (frame) {
    
result += "n " + frame.buildMessage();
  });

  return 
result;
};
?>
Онлайн: 2
Реклама