zulip/zephyr/lib/minify.py

32 lines
1.2 KiB
Python

from __future__ import absolute_import
from django.conf import settings
from hashlib import sha1
from os import path
from pipeline.compressors import SubProcessCompressor
class ClosureSourceMapCompressor(SubProcessCompressor):
def compress_js(self, js):
# js is the full text of the JavaScript source, and we can't
# easily get either the input file names or the output file
# name. So we just pick a unique arbitrary name. This is
# okay because we can figure out from the source map file
# contents which JavaScript files it corresponds to.
# As a hack to make things easier, assume that any large input
# corresponds to app.js. This is like 60 times bigger than
# any other input file, at present.
if len(js) > 100000:
source_map_name = 'app.js.map'
else:
source_map_name = sha1(js).hexdigest() + '.map'
source_map = path.join(
settings.PIPELINE_CLOSURE_SOURCE_MAP_DIR, source_map_name)
command = '%s --language_in ECMASCRIPT5 --create_source_map %s' % (
settings.PIPELINE_CLOSURE_BINARY, source_map)
return self.execute_command(command, js)