aboutsummaryrefslogtreecommitdiff
path: root/third_party/closure_compiler/js_minify.py
blob: 52cc876aff46737bfd7ed986f46c1aa8d79fc564 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
''' Javascript minifier using the closure compiler

This minifier strips spaces and comments out of Javascript using the closure
compiler. It takes the original Javascript on standard input, and outputs
the minified output on standard output.

Any errors or other messages from the compiler are output on standard error.
'''

import argparse
import sys
import tempfile

from compile2 import Checker


def Minify(source):
  parser = argparse.ArgumentParser()
  parser.add_argument("-c", "--closure_args", nargs=argparse.ZERO_OR_MORE,
                      help="Arguments passed directly to the Closure compiler")
  args = parser.parse_args()
  with tempfile.NamedTemporaryFile(suffix='.js') as t1, \
       tempfile.NamedTemporaryFile(suffix='.js') as t2:
    t1.write(source)
    t1.seek(0)
    checker = Checker()
    (compile_error, compile_stderr) = checker.check(
        [t1.name],
        out_file=t2.name,
        closure_args=args.closure_args)
    if compile_error:
      print compile_stderr
    t2.seek(0)
    result = t2.read()
    return result


if __name__ == '__main__':
  orig_stdout = sys.stdout
  result = ''
  try:
    sys.stdout = sys.stderr
    result = Minify(sys.stdin.read())
  finally:
    sys.stdout = orig_stdout
    print result