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

var 
highlight = require("../highlight");
var 
path      = require("path");
var 
fs        = require("fs");
var 
_s        = require("underscore.string");
var 
_         = require("lodash");

function 
StackFrame(frame) {
  
this.isEval frame.isEval();
  
this.frame  frame;

  
this.lineNumber frame.lineNumber;
  
this.colNumber  frame.colNumber;
  
this.file       frame.file;

  
this.setPath();
  
this.setFunctionName(frame);
  
this.setLineAndColNumber(frame);
}

StackFrame.prototype.setFunctionName = function (frame) {
  var 
functionName frame.getFunctionName();
  var 
methodName frame.getMethodName();
  if (
methodNamefunctionName += " [as " methodName "]";
  if (
frame.isConstructor()) functionName "new " functionName;
  
this.functionName functionName;

  
this.contextName frame.getTypeName();
  if (
this.contextName === "Object"this.contextName "";
};

StackFrame.prototype.isEval = function (frame) {
  return 
frame.isEval && frame.isEval();
};

StackFrame.prototype.setLineAndColNumber = function (frame) {
  if (
frame.lineNumber == null && frame.getLineNumber) {
    
this.lineNumber frame.getLineNumber();
  }

  if (
frame.colNumber == null && frame.getColumnNumber) {
    
this.colNumber frame.getColumnNumber();
  }
};

StackFrame.prototype.setPath = function (filename) {
  var 
frame this.frame;

  
filename filename || this.getFilename(frame);
  
this.filename filename;

  var 
isUser true;
  var 
prettyPath;

  if (
filename) {
    
prettyPath path.relative(process.cwd(), filename);
  } else {
    if (
frame.isEval()) prettyPath "eval";
  }
  
this.filename prettyPath || filename;

  if (
frame.isNative()) isUser false;
  if (!
_.contains(filenamepath.sep)) isUser false;
  if (
_.contains(filename"node_modules")) isUser false;
  
this.isUser isUser;

  var 
moduleMatch filename.match(/node_modules[\/]([^\/]+)/);
  if (
moduleMatch) {
    
this.moduleName moduleMatch[1];

    try {
      var 
modLoc filename.match(/^((.*?)[\/]node_modules[\/]([^\/]+))/)[1];
      var 
pkgLoc modLoc "/package.json";
      var 
pkg = require(pkgLoc);
      
this.moduleVersion pkg.version;
    } catch (
err) {

    }
  }
};

StackFrame.prototype.getFilename = function (frame) {
  var 
filename;
  if (
frame.getFileNamefilename frame.getFileName();
  return 
filename || frame.prettyPath || "";
};

StackFrame.prototype.getFile = function () {
  if (
this.file != null) return this.file;

  if (
fs.existsSync(this.filename)) {
    return 
this.file fs.readFileSync(this.filename"utf8");
  } else {
    return 
this.file "";
  }
};

StackFrame.prototype.isJavascript = function () {
  return 
path.extname(this.filename) === ".js";
};

StackFrame.prototype.getHighlightedFile = function () {
  var 
file this.getFile();
  if (
this.isJavascript()) {
    return 
highlight(filetrue);
  } else {
    return 
file;
  }
};

StackFrame.prototype.buildMessage = function () {
  var 
functionName this.functionName;
  var 
lineNumber   this.lineNumber;
  var 
colNumber    this.colNumber;
  var 
filename     this.filename;

  var 
text = [];

  if (
functionName) {
    
text.push("at");
    
text.push(functionName);
  }

  var 
filenameParts = [];

  if (!
this.isEval && filename) {
    
text.push("in");
    
filenameParts.push(filename);
  }

  if (
lineNumber) {
    
filenameParts.push(_.compact([lineNumbercolNumber]).join(":"));
  }

  if (
filenameParts.length) {
    
text.push(filenameParts.join(":"));
  }

  return 
text.join(" ");
};

StackFrame.prototype.fileExists = function () {
  return 
this.file || fs.existsSync(this.filename);
};
?>
Онлайн: 1
Реклама