decaffeinate-coffeescript2
Advanced tools
Comparing version 2.2.1-patch.1 to 2.2.1-patch.2
@@ -7,4 +7,3 @@ // Generated by CoffeeScript 2.2.1 | ||
// source CoffeeScript into JavaScript. | ||
var FILE_EXTENSIONS, Lexer, SourceMap, base64encode, checkShebangLine, compile, formatSourcePosition, getSourceMap, helpers, lexer, packageJson, parser, sourceMaps, sources, withPrettyErrors, | ||
indexOf = [].indexOf; | ||
var FILE_EXTENSIONS, Lexer, SourceMap, base64encode, checkShebangLine, compile, helpers, lexer, packageJson, parser, sourceMaps, sources, withPrettyErrors; | ||
@@ -161,3 +160,3 @@ ({Lexer} = require('./lexer')); | ||
if (options.header) { | ||
header = `Generated by CoffeeScript ${this.VERSION}`; | ||
header = "Generated by CoffeeScript 2.2.1"; | ||
js = `// ${header}\n${js}`; | ||
@@ -295,133 +294,2 @@ } | ||
// Based on http://v8.googlecode.com/svn/branches/bleeding_edge/src/messages.js | ||
// Modified to handle sourceMap | ||
formatSourcePosition = function(frame, getSourceMapping) { | ||
var as, column, fileLocation, filename, functionName, isConstructor, isMethodCall, line, methodName, source, tp, typeName; | ||
filename = void 0; | ||
fileLocation = ''; | ||
if (frame.isNative()) { | ||
fileLocation = "native"; | ||
} else { | ||
if (frame.isEval()) { | ||
filename = frame.getScriptNameOrSourceURL(); | ||
if (!filename) { | ||
fileLocation = `${frame.getEvalOrigin()}, `; | ||
} | ||
} else { | ||
filename = frame.getFileName(); | ||
} | ||
filename || (filename = "<anonymous>"); | ||
line = frame.getLineNumber(); | ||
column = frame.getColumnNumber(); | ||
// Check for a sourceMap position | ||
source = getSourceMapping(filename, line, column); | ||
fileLocation = source ? `${filename}:${source[0]}:${source[1]}` : `${filename}:${line}:${column}`; | ||
} | ||
functionName = frame.getFunctionName(); | ||
isConstructor = frame.isConstructor(); | ||
isMethodCall = !(frame.isToplevel() || isConstructor); | ||
if (isMethodCall) { | ||
methodName = frame.getMethodName(); | ||
typeName = frame.getTypeName(); | ||
if (functionName) { | ||
tp = as = ''; | ||
if (typeName && functionName.indexOf(typeName)) { | ||
tp = `${typeName}.`; | ||
} | ||
if (methodName && functionName.indexOf(`.${methodName}`) !== functionName.length - methodName.length - 1) { | ||
as = ` [as ${methodName}]`; | ||
} | ||
return `${tp}${functionName}${as} (${fileLocation})`; | ||
} else { | ||
return `${typeName}.${methodName || '<anonymous>'} (${fileLocation})`; | ||
} | ||
} else if (isConstructor) { | ||
return `new ${functionName || '<anonymous>'} (${fileLocation})`; | ||
} else if (functionName) { | ||
return `${functionName} (${fileLocation})`; | ||
} else { | ||
return fileLocation; | ||
} | ||
}; | ||
getSourceMap = function(filename, line, column) { | ||
var answer, i, map, ref, ref1, sourceLocation; | ||
if (!(filename === '<anonymous>' || (ref = filename.slice(filename.lastIndexOf('.')), indexOf.call(FILE_EXTENSIONS, ref) >= 0))) { | ||
// Skip files that we didn’t compile, like Node system files that appear in | ||
// the stack trace, as they never have source maps. | ||
return null; | ||
} | ||
if (filename !== '<anonymous>' && (sourceMaps[filename] != null)) { | ||
return sourceMaps[filename][sourceMaps[filename].length - 1]; | ||
// CoffeeScript compiled in a browser or via `CoffeeScript.compile` or `.run` | ||
// may get compiled with `options.filename` that’s missing, which becomes | ||
// `<anonymous>`; but the runtime might request the stack trace with the | ||
// filename of the script file. See if we have a source map cached under | ||
// `<anonymous>` that matches the error. | ||
} else if (sourceMaps['<anonymous>'] != null) { | ||
ref1 = sourceMaps['<anonymous>']; | ||
// Work backwards from the most recent anonymous source maps, until we find | ||
// one that works. This isn’t foolproof; there is a chance that multiple | ||
// source maps will have line/column pairs that match. But we have no other | ||
// way to match them. `frame.getFunction().toString()` doesn’t always work, | ||
// and it’s not foolproof either. | ||
for (i = ref1.length - 1; i >= 0; i += -1) { | ||
map = ref1[i]; | ||
sourceLocation = map.sourceLocation([line - 1, column - 1]); | ||
if (((sourceLocation != null ? sourceLocation[0] : void 0) != null) && (sourceLocation[1] != null)) { | ||
return map; | ||
} | ||
} | ||
} | ||
// If all else fails, recompile this source to get a source map. We need the | ||
// previous section (for `<anonymous>`) despite this option, because after it | ||
// gets compiled we will still need to look it up from | ||
// `sourceMaps['<anonymous>']` in order to find and return it. That’s why we | ||
// start searching from the end in the previous block, because most of the | ||
// time the source map we want is the last one. | ||
if (sources[filename] != null) { | ||
answer = compile(sources[filename][sources[filename].length - 1], { | ||
filename: filename, | ||
sourceMap: true, | ||
literate: helpers.isLiterate(filename) | ||
}); | ||
return answer.sourceMap; | ||
} else { | ||
return null; | ||
} | ||
}; | ||
// Based on [michaelficarra/CoffeeScriptRedux](http://goo.gl/ZTx1p) | ||
// NodeJS / V8 have no support for transforming positions in stack traces using | ||
// sourceMap, so we must monkey-patch Error to display CoffeeScript source | ||
// positions. | ||
Error.prepareStackTrace = function(err, stack) { | ||
var frame, frames, getSourceMapping; | ||
getSourceMapping = function(filename, line, column) { | ||
var answer, sourceMap; | ||
sourceMap = getSourceMap(filename, line, column); | ||
if (sourceMap != null) { | ||
answer = sourceMap.sourceLocation([line - 1, column - 1]); | ||
} | ||
if (answer != null) { | ||
return [answer[0] + 1, answer[1] + 1]; | ||
} else { | ||
return null; | ||
} | ||
}; | ||
frames = (function() { | ||
var i, len, results; | ||
results = []; | ||
for (i = 0, len = stack.length; i < len; i++) { | ||
frame = stack[i]; | ||
if (frame.getFunction() === exports.run) { | ||
break; | ||
} | ||
results.push(` at ${formatSourcePosition(frame, getSourceMapping)}`); | ||
} | ||
return results; | ||
})(); | ||
return `${err.toString()}\n${frames.join('\n')}\n`; | ||
}; | ||
checkShebangLine = function(file, input) { | ||
@@ -428,0 +296,0 @@ var args, firstLine, ref, rest; |
@@ -11,3 +11,3 @@ { | ||
"author": "Jeremy Ashkenas", | ||
"version": "2.2.1-patch.1", | ||
"version": "2.2.1-patch.2", | ||
"license": "MIT", | ||
@@ -14,0 +14,0 @@ "engines": { |
18
683879
28
15063