Last active
October 14, 2016 20:31
-
-
Save NF1198/a5097a5fa0fa3a5c1b1f708ba5ff0c1e to your computer and use it in GitHub Desktop.
node.js line number debug utility script - returns call site info for debugging purposes - compatible with TypeScript & ES5+
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (c) 2016 Nicholas Folse -- All Rights Reserved | |
* | |
* debug-util.js -- Call site info for debugging javascript | |
* | |
* requires node 'source-map' (npm install source-map) | |
* | |
* usage: | |
* | |
* const debug_line = require("../debug-util"); | |
* | |
* function myFunc() { | |
* console.log(debug_line()); | |
* } | |
* | |
*/ | |
"use strict"; | |
var sourceMap = require("source-map"); | |
var fs = require("fs"); | |
var path = require("path"); | |
function prepareStackTrace(_, stack) { | |
return stack; | |
} | |
var __sourceMapCache = {}; | |
function getSourceMap(fileName) { | |
var srcmap = __sourceMapCache[fileName]; | |
if (srcmap) { | |
return srcmap; | |
} | |
try { | |
var smc = new sourceMap.SourceMapConsumer(JSON.parse(fs.readFileSync(fileName, "utf-8"))); | |
if (smc) { | |
__sourceMapCache[fileName] = smc; | |
return smc; | |
} | |
} catch (e) { | |
} | |
} | |
function debug_line(stackOffset) { | |
var offset = stackOffset || 0; | |
var orig = Error.prepareStackTrace; | |
Error.prepareStackTrace = prepareStackTrace; | |
var err = new Error(); | |
var stack = err.stack; | |
Error.prepareStackTrace = orig; | |
var cs = stack[1 + offset]; | |
var file = cs.getFileName(); | |
var line = cs.getLineNumber(); | |
var column = cs.getColumnNumber(); | |
var functionName = cs.getFunctionName() || "<anonymous>"; | |
var summary = path.basename(file) + ":" + line + ":" + column + "(@" + functionName + ")"; | |
var src = file, lineNo = line, colNo = column; | |
var map_file_src = src + '.map'; | |
var lineDef = {source: file, line: lineNo, column: colNo, summary: summary}; | |
var srcMap = getSourceMap(map_file_src); | |
var origSrc = srcMap.originalPositionFor({line: lineNo, column: colNo}); | |
lineDef.source = origSrc.source; | |
lineDef.line = origSrc.line; | |
lineDef.column = origSrc.column; | |
lineDef.summary = path.basename(origSrc.source) + ":" + origSrc.line + ":" + origSrc.column + "(@" + functionName + ")"; | |
return lineDef; | |
} | |
module.exports = debug_line; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment