1: #!/bin/bash
2:
3: # Constants
4: SERVICE_URL=http://closure-compiler.appspot.com/compile
5: NEWFILE="c`date +"%d%m%y"`.js"
6: OPTIONS=""
7:
8: if [ "$1" = "-strict" ]
9: then
10: OPTIONS="--data language=ECMASCRIPT5_STRICT"
11: shift
12: fi
13:
14: # Check if files to compile are provided
15: if [ $# -eq 0 ]
16: then
17: echo 'Nothing to compile. Specify input files as command arguments. E.g.'
18: echo './compressjs file1.js file2.js file3.js'
19: exit
20: fi
21:
22: # Itearate through all files
23: for f in $*
24: do
25: if [ -r "${f}" ]
26: then
27: code="${code} --data-urlencode js_code@${f}"
28: else
29: echo "File ${f} does not exist or is not readable. Skipped."
30: fi
31: done
32:
33: # Send request
34: curl \
35: --url ${SERVICE_URL} \
36: --header 'Content-type: application/x-www-form-urlencoded' \
37: ${code} \
38: --data output_format=json \
39: --data output_info=compiled_code \
40: --data output_info=statistics \
41: --data output_info=errors \
42: --data compilation_level=SIMPLE_OPTIMIZATIONS \
43: ${OPTIONS} |
44:
45: python -c '
46: import json, sys
47: data = json.load(sys.stdin)
48:
49: if "errors" in data:
50: print "### COMPILATION FAILED WITH ERRORS"
51: for err in data["errors"]:
52: file = sys.argv[int(err["file"].replace("Input_", "")) + 1]
53: print "File: %s, %d:%d" % (file, err["lineno"], err["charno"])
54: print "Error: %s" % err["error"]
55: print "Line: %s" % err["line"]
56:
57: print "\nBuild failed.\n"
58:
59: else:
60: print "### COMPILATION COMPLETED"
61: print "Original size: %db, gziped: %db" % (data["statistics"]["originalSize"], data["statistics"]["originalGzipSize"])
62: print "Compressed size: %db, gziped: %db" % (data["statistics"]["compressedSize"], data["statistics"]["compressedGzipSize"])
63: print "Compression rate: %.2f" % (float(data["statistics"]["compressedSize"]) / int(data["statistics"]["originalSize"]))
64:
65: filename = "'${NEWFILE}'"
66: f = open(filename, "w")
67: f.write(data["compiledCode"])
68:
69: print "\nBuild file %s created.\n" % filename
70: ' $@
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>