// Set source-map.js sourceMap to uglify.js MOZ_SourceMap MOZ_SourceMap = sourceMap;
function comments(option) {
if (Object.prototype.toString.call(option) === '[object Array]') {
return new RegExp(option[0], option[1]);
} else if (option == "jsdoc") {
return function(node, comment) {
if (comment.type == "comment2") {
return /@preserve|@license|@cc_on/i.test(comment.value);
} else {
return false;
}
};
} else {
return option;
}
}
function readNameCache(key) {
return UglifyJS.readNameCache(null, key);
}
function writeNameCache(key, cache) {
return UglifyJS.writeNameCache(null, key, cache);
}
function regexOption(options) {
if (typeof options === 'object' && options.regex) {
return new RegExp(options.regex[0], options.regex[1]);
} else {
return null;
}
}
function parse(source, options) {
UglifyJS.base54.reset();
var ast = UglifyJS.parse(source, options.parse_options);
if (options.compress) {
var compress = { warnings: false };
UglifyJS.merge(compress, options.compress);
ast.figure_out_scope(options.mangle);
var compressor = UglifyJS.Compressor(compress);
ast = compressor.compress(ast);
ast.figure_out_scope();
}
if (options.mangle) {
ast.figure_out_scope(options.mangle);
ast.compute_char_frequency();
ast.mangle_names(options.mangle);
}
if (options.mangle_properties) {
var regex = regexOption(options.mangle_properties);
UglifyJS.mangle_properties(ast, {
reserved: [],
only_cache: false,
regex: regex,
debug: options.mangle_properties.debug,
ignore_quoted: options.mangle_properties.ignore_quoted
});
}
if (options.enclose) {
ast = ast.wrap_enclose(options.enclose);
}
return ast;
}
function copySourcesContent(sourceMap, options) {
sourceMap.get().setSourceContent(options.parse_options.filename, options.source);
var original = options.source_map_options.orig;
if (original && original.sources && original.sourcesContent) {
for(var i = 0; i < original.sources.length; i++) {
sourceMap.get().setSourceContent(original.sources[i], original.sourcesContent[i]);
}
}
}
function uglifier(options) {
var source = options.source;
var ast = parse(source, options);
var source_map;
var gen_code_options = options.output;
gen_code_options.comments = comments(options.output.comments);
if (options.generate_map) {
source_map = UglifyJS.SourceMap(options.source_map_options);
gen_code_options.source_map = source_map;
if (options.source_map_options.sources_content) {
copySourcesContent(source_map, options);
}
}
var stream = UglifyJS.OutputStream(gen_code_options);
ast.print(stream);
if (options.source_map_options.map_url) {
stream += "\n//# sourceMappingURL=" + options.source_map_options.map_url;
}
if (options.source_map_options.url) {
stream += "\n//# sourceURL=" + options.source_map_options.url;
}
if (options.generate_map) {
if (options.source_map_options.sources_content) {
source_map.get().setSourceContent(options.parse_options.filename, options.source);
}
return [stream.toString(), source_map.toString()];
} else {
return stream.toString();
}
}