package com.prezi.spaghetti.obfuscation;
import com.google.common.collect.ImmutableSortedSet;
import com.google.javascript.jscomp.CompilationLevel;
import com.prezi.spaghetti.ast.ModuleNode;
import com.prezi.spaghetti.definition.ModuleConfiguration;
import java.io.File;
import java.net.URI;
import java.util.Set;
import java.util.SortedSet;
import org.slf4j.Logger;
/**
* Parameter object for obfuscation.
*/
public class ObfuscationParameters {
public final ModuleConfiguration config;
public final ModuleNode module;
public final String javaScript;
public final String sourceMap;
public final URI sourceMapRoot;
public final String nodeSourceMapRoot;
public final SortedSet<File> closureExterns;
public final SortedSet<String> additionalSymbols;
public final File workingDirectory;
public final File tsCompilerPath;
public final Logger logger;
public final CompilationLevel compilationLevel;
public ObfuscationParameters(ModuleConfiguration config, ModuleNode module, String javaScript, String sourceMap, URI sourceMapRoot, String nodeSourceMapRoot, Set<File> closureExterns, Set<String> additionalSymbols, File workingDirectory, File tsCompilerPath, Logger logger, CompilationLevel compilationLevel) {
this.config = config;
this.module = module;
this.javaScript = javaScript;
this.sourceMap = sourceMap;
this.sourceMapRoot = sourceMapRoot;
this.nodeSourceMapRoot = nodeSourceMapRoot;
this.closureExterns = ImmutableSortedSet.copyOf(closureExterns);
this.additionalSymbols = ImmutableSortedSet.copyOf(additionalSymbols);
this.workingDirectory = workingDirectory;
this.tsCompilerPath = tsCompilerPath;
this.logger = logger;
this.compilationLevel = compilationLevel;
}
public ObfuscationParameters(ModuleConfiguration config, ModuleNode module, String javaScript, String sourceMap, URI sourceMapRoot, String nodeSourceMapRoot, Set<File> closureExterns, Set<String> additionalSymbols, File workingDirectory, File tsCompilerPath, Logger logger, String compilationLevel) {
this(config, module, javaScript, sourceMap, sourceMapRoot, nodeSourceMapRoot, closureExterns, additionalSymbols, workingDirectory, tsCompilerPath, logger, convertCompilationLevel(compilationLevel));
}
private static CompilationLevel convertCompilationLevel(String compilationLevel) {
if (compilationLevel.equals("advanced")) {
return CompilationLevel.ADVANCED_OPTIMIZATIONS;
} else if (compilationLevel.equals("simple")) {
return CompilationLevel.SIMPLE_OPTIMIZATIONS;
} else if (compilationLevel.equals("whitespace")) {
return CompilationLevel.WHITESPACE_ONLY;
} else {
throw new IllegalArgumentException("Unknown compilation level: " + compilationLevel);
}
}
}