AstroJS/botanjs/compressor/closure.py

53 lines
1.2 KiB
Python
Raw Permalink Normal View History

2015-08-14 10:12:10 +00:00
#!/usr/bin/env python3
import os
from tempfile import NamedTemporaryFile
2016-05-27 17:39:59 +00:00
from botanjs.config import Config as config
2015-08-14 10:12:10 +00:00
2016-05-27 17:39:59 +00:00
COMPILER = config[ "BotanJS" ][ "ClosureCompiler" ]
2015-08-14 10:12:10 +00:00
if not os.path.isfile( COMPILER ):
raise Exception( "Compiler not found" )
COMPILER_OPTIONS = [
"--compilation_level ADVANCED_OPTIMIZATIONS"
, "--output_wrapper=\"(function(){%output%})();\""
]
class Wrapper:
C = None
# externs
E = ""
def __init__( self ):
self.C = "java -jar "+ COMPILER + " " + " ".join( COMPILER_OPTIONS )
def scanExterns( self, sdir ):
for root, dirs, files in os.walk( sdir ):
# Split file extensions
files = list( os.path.splitext( x ) for x in files )
files.sort()
for f in files:
files.remove( f ) if f[1] != ".js" else None
self.E = " --externs " + " --externs ".join(
os.path.join( root, x )
# join back extensions
for x in list( "".join( x ) for x in files )
)
break
def compress( self, loc ):
content = ""
with open( loc, "rb" ) as f:
content = f.read()
with NamedTemporaryFile() as f:
f.write( content[12:-5] )
os.system( self.C + self.E + " --js " + f.name + " --js_output_file " + loc[:-3] + ".c.js" )