Class Compressor

java.lang.Object
com.iizix.js.build.Compressor

public class Compressor extends Object
Compressor class to compress CSS and JavaScript.

The JavaScript compressor uses Google Closure Compiler v20160822.

Author:
Christopher Mindus
  • Method Details

    • getInstance

      public static Compressor getInstance(File root) throws IOException
      Returns the singleton of the compressor.
      Parameters:
      root - The root for the webserver, i.e. "js/root" in this project.
      Returns:
      The compressor.
      Throws:
      IOException - If the compressor is not found.
    • invokeCSSCompressor

      public File invokeCSSCompressor(File htmlFile, List<String> files) throws IOException
      Invokes the CSS Closure Sheets compressor and returns the output.

      Command line options:

        --allow-unrecognized-functions         : Allow unrecognized functions.
        
        --allow-unrecognized-properties        : Allow unrecognized properties.
        
        --allowed-non-standard-function VAL    : Specify a non-standard function to whitelist, like alpha()
        
        --allowed-unrecognized-property VAL    : Specify an unrecognized property to whitelist
        
        --copyright-notice VAL                 : Copyright notice to prepend to the output
        
        --define VAL                           : Specifies the name of a true condition. The condition name can be used in
                                                 @if boolean expressions. The conditions are ignored if GSS extensions are
                                                 not enabled.
       
        --excluded-classes-from-renaming VAL   : Pass the compiler a list of CSS class names that shoudn't be renamed.
       
        --gss-function-map-provider VAL        : The fully qualified class name of a map provider of custom GSS functions
                                                 to resolve.
       
        --input-orientation [LTR | RTL]        : This specifies the display orientation the input files were written for. You
                                                 can choose between: LTR, RTL. LTR is the default and means that the input
                                                 style sheets were designed for use with left to right display User
                                                 Agents. RTL sheets are designed for use with right to left UAs. Currently,
                                                 all input files must have the same orientation, as there is no way to
                                                 specify the orientation on a per-file or per-library basis.
        
        --output-file (-o) VAL                 : The output CSS filename. If empty, standard output will be used. The
                                                 output is always UTF-8 encoded.
        
        --output-orientation [LTR | RTL | NOCHANGE] :
                                                 Specify this option to perform automatic right to left conversion of
                                                 the input. You can choose between: LTR, RTL, NOCHANGE. NOCHANGE means
                                                 the input will not be changed in any way with respect to direction issues.
                                                 LTR outputs a sheet suitable for left to right display and RTL outputs a
                                                 sheet suitable for right to left display. If the input orientation is
                                                 different than the requested output orientation, 'left' and 'right'
                                                 values in direction sensitive style rules are flipped. If the input
                                                 already has the desired orientation, this option effectively does nothing
                                                 except for defining GSS_LTR and GSS_RTL, respectively. The input is
                                                 LTR by default and can be changed with the input_orientation flag.
       
        --output-renaming-map VAL              : The output from the CSS class renaming. Provides a map of class
                                                 names to what they were renamed to.
       
        --output-renaming-map-format [CLOSURE_COMPILED | CLOSURE_UNCOMPILED | JSON | PROPERTIES] :
                                                 How to format the output from the the CSS class renaming.
       
        --pretty-print                         : Whether to format the output with newlines and indents so that it is
                                                 more readable.
       
        --rename [NONE | DEBUG | CLOSURE]      : How CSS classes should be renamed. Defaults to NONE.
       
        --vendor [WEBKIT | MOZILLA | MICROSOFT | OPERA | KONQUEROR] :
                                                 Creates browser-vendor-specific output by stripping all proprietary
                                                 browser-vendor properties from the output except for those associated
                                                 with this vendor.
       

      Parameters:
      htmlFile - The HTML file.
      files - The list of files to compress.
      Returns:
      The file output, a temporary file that must be deleted to clean-up.
      Throws:
      IOException - For process errors.
    • invokeCSSCompressor

      public void invokeCSSCompressor(File inputCSS, File outputCSS) throws IOException
      Compresses a single CSS file.
      Parameters:
      inputCSS - The input CSS file.
      outputCSS - The output CSS file.
      Throws:
      IOException - For process errors.
    • invokeCSSCompressor

      public void invokeCSSCompressor(File currDir, File outputCSS, List<String> files) throws IOException
      Invokes the CSS compressor in the specified directory.
      Parameters:
      currDir - The current directory.
      outputCSS - The output CSS file.
      files - The list of CSS files.
      Throws:
      IOException - For process errors.
    • invokeJSCompressor

      public File invokeJSCompressor(File htmlFile, List<String> files, Compressor.Level optimizeLevel) throws IOException
      Invokes the Google Closure Compiler and returns the output.

      Options:

        --angular_pass                         : Generate $inject properties for AngularJS for functions annotated with @ngInject
        
        --charset VAL                          : Input and output charset for all files. By default, we accept UTF-8 as input and output US_ASCII
        
        --checks-only                          : Don't generate output. Run checks, but no compiler passes.
        
        --closure_entry_point VAL              : Entry points to the program. Must be goog.provide'd symbols. Any goog.provide'd symbols that are not a transitive
                                                 dependency of the entry points will be removed. Files without goog.provides, and their dependencies, will
                                                 always be left in. If any entry points are specified, then the manage_closure_dependencies option
                                                 will be set to true and all files will be sorted in dependency order.
                                                 
        --common_js_entry_module VAL           : Root of your common JS dependency hierarchy. Your main script.
        
        --common_js_module_path_prefix VAL     : Path prefix to be removed from CommonJS module names.
        
        --compilation_level (-O) VAL           : Specifies the compilation level to use. Options: WHITESPACE_ONLY, SIMPLE, ADVANCED
        
        --conformance_configs VAL              : A list of JS Conformance configurations in text protocol buffer format.
        
        --create_renaming_reports              : If true, variable renaming and property renaming report files will be produced as {binary name}_vars_renaming_report.out
                                                 and {binary name}_props_renaming_report.out. Note that this flag cannot be used in conjunction with either variable_renaming_report
                                                 or property_renaming_report
                                                 
        --create_source_map VAL                : If specified, a source map file mapping the generated source files back to the original source file will be output to the specified path. The
                                                 %outname% placeholder will expand to the name of the output file that the source map corresponds to.
                                                 
        --dart_pass                            : Rewrite Dart Dev Compiler output to be compiler-friendly.
        
        --debug                                : Enable debugging options
        
        --define (--D, -D) VAL                 : Override the value of a variable annotated @define. The format is [name][=[val]], where [name] is the name of a @define variable and [val]
                                                 is a boolean, number, or a single-quoted string that contains no single quotes. If [=[val]] is omitted, the variable is marked true
                                                 
        --env [BROWSER | CUSTOM]               : Determines the set of builtin externs to load. Options: BROWSER, CUSTOM. Defaults to BROWSER.
        
        --export_local_property_definitions    : Generates export code for local properties marked with @export
        
        --externs VAL                          : The file containing JavaScript externs. You may specify multiple
        
        --extra_annotation_name VAL            : A whitelist of tag names in JSDoc. You may specify multiple
        
        --flagfile VAL                         : A file containing additional command-line options.
        
        --formatting [PRETTY_PRINT | PRINT_INPUT_DELIMITER | SINGLE_QUOTES] :
                                                 Specifies which formatting options, if any, should be applied to the output JS. Options: PRETTY_PRINT, PRINT_INPUT_DELIMITER, SINGLE_QUOTES
                                                 
        --generate_exports                     : Generates export code for those marked with @export
        
        --help                                 : Displays this message on stdout and exit
        
        --instrumentation_template VAL         : A file containing an instrumentation template.
        
        --js VAL                               : The JavaScript filename. You may specify multiple. The flag name is optional, because args are interpreted as files by default. You may also use
                                                 minimatch-style glob patterns. For example, use --js='**.js' --js='!**_test.js' to recursively include all js files that do not end in _test.js
                                                 
        --js_module_root VAL                   : Path prefixes to be removed from ES6 & CommonJS modules.
        
        --js_output_file VAL                   : Primary output filename. If not specified, output is written to stdout
        
        --jscomp_error VAL                     : Make the named class of warnings an error. Options: accessControls, ambiguousFunctionDecl, checkEventfulObjectDisposal, checkRegExp, checkTypes,
                                                 checkVars, conformanceViolations, const, constantProperty, deprecated, deprecatedAnnotations, duplicateMessage, es3, es5Strict, externsValidation,
                                                 fileoverviewTags, globalThis, inferredConstCheck, internetExplorerChecks, invalidCasts, misplacedTypeAnnotation, missingGetCssName, missingProperties,
                                                 missingProvide, missingRequire, missingReturn, msgDescriptionsnewCheckTypes, nonStandardJsDocs, reportUnknownTypes, suspiciousCode, strictModuleDepCheck,
                                                 typeInvalidation, undefinedNames, undefinedVars, unknownDefines, unnecessaryCasts, uselessCode, useOfGoogBase, visibility.
                                                 '*' adds all supported.
                                                 
        --jscomp_off VAL                       : Turn off the named class of warnings. Options: accessControls, ambiguousFunctionDecl, checkEventfulObjectDisposal,
                                                 checkRegExp, checkTypes, checkVars, conformanceViolations, const, constantProperty, deprecated, deprecatedAnnotations, duplicateMessage,
                                                 es3, es5Strict, externsValidation, fileoverviewTags, globalThis, inferredConstCheck, internetExplorerChecks, invalidCasts, misplacedTypeAnnotation,
                                                 missingGetCssName, missingProperties, missingProvide, missingRequire, missingReturn, msgDescriptionsnewCheckTypes, nonStandardJsDocs, reportUnknownTypes,
                                                 suspiciousCode, strictModuleDepCheck, typeInvalidation, undefinedNames, undefinedVars, unknownDefines, unnecessaryCasts, uselessCode,
                                                 useOfGoogBase, visibility.
                                                 '*' adds all supported.
                                                 
        --jscomp_warning VAL                   : Make the named class of warnings a normal warning. Options: accessControls, ambiguousFunctionDecl, checkEventfulObjectDisposal, checkRegExp, checkTypes,
                                                 checkVars, conformanceViolations, const, constantProperty, deprecated, deprecatedAnnotations, duplicateMessage, es3, es5Strict, externsValidation,
                                                 fileoverviewTags, globalThis, inferredConstCheck, internetExplorerChecks, invalidCasts, misplacedTypeAnnotation, missingGetCssName, missingProperties,
                                                 missingProvide, missingRequire, missingReturn, msgDescriptionsnewCheckTypes, nonStandardJsDocs, reportUnknownTypes, suspiciousCode, strictModuleDepCheck,
                                                 typeInvalidation, undefinedNames, undefinedVars, unknownDefines, unnecessaryCasts, uselessCode, useOfGoogBase, visibility.
                                                 '*' adds all supported.
                                                 
        --jszip VAL                            : The JavaScript zip filename. You may specify multiple.
        
        --language_in VAL                      : Sets what language spec that input sources conform.
                                                 Options: ECMASCRIPT3 (default), ECMASCRIPT5, ECMASCRIPT5_STRICT, ECMASCRIPT6, ECMASCRIPT6_STRICT, ECMASCRIPT6_TYPED (experimental)
                                                 
        --language_out VAL                     : Sets what language spec the output should conform to. If omitted, defaults to the value of language_in.
                                                 Options: ECMASCRIPT3, ECMASCRIPT5, ECMASCRIPT5_STRICT, ECMASCRIPT6_TYPED (experimental)
                                                 
        --logging_level VAL                    : The logging level (standard java.util.logging.Level values) for Compiler progress. Does not control errors or
                                                 warnings for the JavaScript code under compilation
                                                 
        --manage_closure_dependencies          : Automatically sort dependencies so that a file that goog.provides symbol X will always come before a file that
                                                 goog.requires symbol X. If an input provides symbols, and those symbols are never required, then that input
                                                 will not be included in the compilation.
                                                 
        --module VAL                           : A JavaScript module specification. The format is [name]:[num-js-files][:[[dep],...][:]]]. Module names must be unique. Each dep is the name of a
                                                 module that this module depends on. Modules must be listed in dependency order, and JS source files must be listed in the corresponding order.
                                                 Where --module flags occur in relation to --js flags is unimportant. [num-js-files] may be set to 'auto' for the first module if it has no
                                                 dependencies. Provide the value 'auto' to trigger module creation from CommonJSmodules.
                                                 
        --module_output_path_prefix VAL        : Prefix for filenames of compiled JS modules. [module-name].js will be appended to this prefix. Directories will be created as needed.
                                                 Use with --module
                                                 
        --module_wrapper VAL                   : An output wrapper for a JavaScript module (optional). The format is [name]:[wrapper]. The module name must correspond with a module
                                                 specified using --module. The wrapper must contain %s as the code placeholder. The %basename% placeholder can also be used to substitute the base
                                                 name of the module output file.
                                                 
        --new_type_inf                         : Checks for type errors using the new type inference algorithm.
        
        --only_closure_dependencies            : Only include files in the transitive dependency of the entry points (specified by closure_entry_point).
                                                 Files that do not provide dependencies will be removed. This supersedes manage_closure_dependencies
                                                 
        --output_manifest VAL                  : Prints out a list of all the files in the compilation. If --manage_closure_dependencies is on, this will not include files that got dropped
                                                 because they were not required. The %outname% placeholder expands to the JS output file. If you're using modularization, using %outname% will
                                                 create a manifest for each module.
                                                 
        --output_module_dependencies VAL       : Prints out a JSON file of dependencies between modules.
        
        --output_wrapper VAL                   : Interpolate output into this string at the place denoted by the marker token %output%. Use marker token %output|jsstring% to do js string
                                                 escaping on the output.
                                                 
        --output_wrapper_file VAL              : Loads the specified file and passes the file contents to the --output_wrap per flag, replacing the value if it exists.
        
        --polymer_pass                         : Rewrite Polymer classes to be compiler-friendly.
        
        --print_ast                            : Prints a dot file describing the internal abstract syntax tree and exits
        
        --print_pass_graph                     : Prints a dot file describing the passes that will get run and exits
        
        --print_tree                           : Prints out the parse tree and exits
        
        --process_closure_primitives           : Processes built-ins from the Closure library, such as goog.require(), goog.provide(), and goog.exportSymbol(). True by default.
        
        --process_common_js_modules            : Process CommonJS modules to a concatenable form.
        
        --process_jquery_primitives            : Processes built-ins from the Jquery library, such as jQuery.fn and jQuery.extend()
        
        --property_renaming_report VAL         : File where the serialized version of the property renaming map produced should be saved
        
        --rename_prefix_namespace VAL          : Specifies the name of an object that will be used to store all non-extern globals
        
        --source_map_format [DEFAULT | V3]     : The source map format to produce. Options are V3 and DEFAULT, which are equivalent.
        
        --source_map_input VAL                 : Source map locations for input files, separated by a '|', (i.e. input-file-path|input-source-map)
        
        --source_map_location_mapping VAL      : Source map location mapping separated by a '|' (i.e. filesystem-path|webserver-path)
        
        --summary_detail_level N               : Controls how detailed the compilation summary is. Values: 0 (never print summary), 1 (print summary only if
                                                 there are errors or warnings), 2 (print summary if the 'checkTypes' diagnostic  group is enabled, see
                                                 --jscomp_warning), 3 (always print summary). The default level is 1
                                                 
        --third_party                          : Check source validity but do not enforce Closure style rules and conventions
        
        --tracer_mode [ALL | RAW_SIZE | TIMING_ONLY | OFF] :
                                                 Shows the duration of each compiler pass and the impact to the compiled output size.
                                                 Options: ALL, RAW_SIZE, TIMING_ONLY, OFF
                                                 
        --transform_amd_modules                : Transform AMD to CommonJS modules.
        
        --translations_file VAL                : Source of translated messages. Currently only supports XTB.
        
        --translations_project VAL             : Scopes all translations to the specified project.When specified, we will use different message ids so
                                                 that messages in different projects can have different translations.
                                                 
        --use_types_for_optimization           : Enable or disable the optimizations based on available type information. Inaccurate type annotations may
                                                 result in incorrect results.
                                                 
        --variable_renaming_report VAL         : File where the serialized version of the variable renaming map produced should be saved
        
        --version                              : Prints the compiler version to stdout and exit.
        
        --warning_level (-W) [QUIET | DEFAULT | VERBOSE] :
                                                 Specifies the warning level to use.
                                                 Options: QUIET, DEFAULT, VERBOSE
                                                 
        --warnings_whitelist_file VAL          : A file containing warnings to suppress. Each line should be of the form
                                                 [file-name]:[line-number]?  [warning-description]
       

      Parameters:
      htmlFile - The HTML file.
      files - The list of files to compress.
      Returns:
      The file output, a temporary file that must be deleted to clean-up.
      Throws:
      IOException - For process errors.
    • invokeJSCompressor

      public void invokeJSCompressor(File inputJS, File outputJS, Compressor.Level optimizeLevel) throws IOException
      Compresses a single JS file.
      Parameters:
      inputJS - The input JS file.
      outputJS - The output JS file.
      optimizeLevel - Optimize level: 0=WHITESPACE_ONLY, 1=SIMPLE, 2=ADVANCED.
      Throws:
      IOException - For process errors.
    • invokeJSCompressor

      public void invokeJSCompressor(File currDir, File outputJS, Compressor.Level optimizeLevel, List<String> files) throws IOException
      Invokes the JS compressor in the specified current directory.
      Parameters:
      currDir - The current directory.
      outputJS - The
      optimizeLevel - Optimize level: 0=WHITESPACE_ONLY, 1=SIMPLE, 2=ADVANCED.
      files - The JS files to compress.
      Throws:
      IOException - For process errors.
    • compressHTML

      public static void compressHTML(File inputHTML, File outputHTML, Charset charset) throws IOException
      Compresses HTML.
      Parameters:
      inputHTML - Input HTML file to compress.
      outputHTML - Output HTML file to write compressed HTML into, and can be the same as the inputHTML file in which case the uncompressed contents will be overwritten without question.
      charset - The Character set to use, null = UTF-8.
      Throws:
      IOException - For I/O errors.
    • compressHTML

      public static String compressHTML(String html) throws IOException
      Compresses HTML.
      Parameters:
      html - The HTML to compress.
      Returns:
      The compressed HTML.
      Throws:
      IOException - For compression errors or I/O errors.