Files
zulip/zephyr/lib/unminify.py
Scott Feeney c234190bc0 Make stack trace annotation work
The code now unminifies all calls in the stack, including those outside
of app.js.

This requires the Python package sourcemap, recently added as a
dependency.

(imported from commit 550c73ad5bfe78a2c7169c11da0c95cbaac238d7)
2013-07-23 16:34:26 -04:00

46 lines
1.6 KiB
Python

from __future__ import absolute_import
import re
import os.path
import sourcemap
class SourceMap(object):
'''Map (line, column) pairs from generated to source file.'''
def __init__(self, sourcemap_dir):
self._dir = sourcemap_dir
self._indices = {}
def _index_for(self, minified_src):
'''Return the source map index for minified_src, loading it if not
already loaded.'''
if minified_src not in self._indices:
with open(os.path.join(self._dir, minified_src + '.map')) as fp:
self._indices[minified_src] = sourcemap.load(fp)
return self._indices[minified_src]
def annotate_stacktrace(self, stacktrace):
out = ''
for ln in stacktrace.splitlines():
out += ln + '\n'
match = re.search(r'/static/min/(.+)(\.[0-9a-f]+)\.js:(\d+):(\d+)', ln)
if match:
# Get the appropriate source map for the minified file.
minified_src = match.groups()[0] + '.js'
index = self._index_for(minified_src)
gen_line, gen_col = map(int, match.groups()[2:4])
# The sourcemap lib is 0-based, so subtract 1 from line and col.
try:
result = index.lookup(line=gen_line-1, column=gen_col-1)
out += (' = %s line %d column %d\n' %
(result.src, result.src_line+1, result.src_col+1))
except IndexError:
out += ' [Unable to look up in source map]'
if ln.startswith(' at'):
out += '\n'
return out