Файл: 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 (methodName) functionName += " [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(filename, path.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.getFileName) filename = 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(file, true);
} 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([lineNumber, colNumber]).join(":"));
}
if (filenameParts.length) {
text.push(filenameParts.join(":"));
}
return text.join(" ");
};
StackFrame.prototype.fileExists = function () {
return this.file || fs.existsSync(this.filename);
};
?>