diff --git a/zerver/lib/unminify.py b/zerver/lib/unminify.py index f6758db867..dc4805d2a6 100644 --- a/zerver/lib/unminify.py +++ b/zerver/lib/unminify.py @@ -5,15 +5,15 @@ import os.path import sourcemap from six.moves import map -from typing import Dict, Text +from typing import Dict, List, Text class SourceMap(object): '''Map (line, column) pairs from generated to source file.''' - def __init__(self, sourcemap_dir): - # type: (Text) -> None - self._dir = sourcemap_dir + def __init__(self, sourcemap_dirs): + # type: (List[Text]) -> None + self._dirs = sourcemap_dirs self._indices = {} # type: Dict[Text, sourcemap.SourceMapDecoder] def _index_for(self, minified_src): @@ -21,8 +21,12 @@ class SourceMap(object): '''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) + for source_dir in self._dirs: + filename = os.path.join(source_dir, minified_src + '.map') + if os.path.isfile(filename): + with open(filename) as fp: + self._indices[minified_src] = sourcemap.load(fp) + break return self._indices[minified_src] @@ -31,7 +35,7 @@ class SourceMap(object): out = '' # type: Text for ln in stacktrace.splitlines(): out += ln + '\n' - match = re.search(r'/static/min/(.+)(\.[0-9a-f]+)\.js:(\d+):(\d+)', ln) + match = re.search(r'/static/(?:webpack-bundles|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' diff --git a/zerver/views/report.py b/zerver/views/report.py index 40c8441c68..f67239f25d 100644 --- a/zerver/views/report.py +++ b/zerver/views/report.py @@ -23,8 +23,10 @@ def get_js_source_map(): # type: () -> Optional[SourceMap] global js_source_map if not js_source_map and not (settings.DEVELOPMENT or settings.TEST_SUITE): - js_source_map = SourceMap(os.path.join( - settings.DEPLOY_ROOT, 'prod-static/source-map')) + js_source_map = SourceMap([ + os.path.join(settings.DEPLOY_ROOT, 'prod-static/source-map'), + os.path.join(settings.DEPLOY_ROOT, 'prod-static/serve/webpack-bundles') + ]) return js_source_map @authenticated_json_post_view