react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / node_modules / uglify-js / tools / node.js
80713 viewsvar path = require("path");1var fs = require("fs");2var vm = require("vm");3var sys = require("util");45var UglifyJS = vm.createContext({6sys : sys,7console : console,8MOZ_SourceMap : require("source-map")9});1011function load_global(file) {12file = path.resolve(path.dirname(module.filename), file);13try {14var code = fs.readFileSync(file, "utf8");15return vm.runInContext(code, UglifyJS, file);16} catch(ex) {17// XXX: in case of a syntax error, the message is kinda18// useless. (no location information).19sys.debug("ERROR in file: " + file + " / " + ex);20process.exit(1);21}22};2324var FILES = exports.FILES = [25"../lib/utils.js",26"../lib/ast.js",27"../lib/parse.js",28"../lib/transform.js",29"../lib/scope.js",30"../lib/output.js",31"../lib/compress.js",32"../lib/sourcemap.js",33"../lib/mozilla-ast.js"34].map(function(file){35return path.join(path.dirname(fs.realpathSync(__filename)), file);36});3738FILES.forEach(load_global);3940UglifyJS.AST_Node.warn_function = function(txt) {41sys.error("WARN: " + txt);42};4344// XXX: perhaps we shouldn't export everything but heck, I'm lazy.45for (var i in UglifyJS) {46if (UglifyJS.hasOwnProperty(i)) {47exports[i] = UglifyJS[i];48}49}5051exports.minify = function(files, options) {52options = UglifyJS.defaults(options, {53outSourceMap : null,54sourceRoot : null,55inSourceMap : null,56fromString : false,57warnings : false,58mangle : {},59output : null,60compress : {}61});62if (typeof files == "string")63files = [ files ];6465// 1. parse66var toplevel = null;67files.forEach(function(file){68var code = options.fromString69? file70: fs.readFileSync(file, "utf8");71toplevel = UglifyJS.parse(code, {72filename: options.fromString ? "?" : file,73toplevel: toplevel74});75});7677// 2. compress78if (options.compress) {79var compress = { warnings: options.warnings };80UglifyJS.merge(compress, options.compress);81toplevel.figure_out_scope();82var sq = UglifyJS.Compressor(compress);83toplevel = toplevel.transform(sq);84}8586// 3. mangle87if (options.mangle) {88toplevel.figure_out_scope();89toplevel.compute_char_frequency();90toplevel.mangle_names(options.mangle);91}9293// 4. output94var inMap = options.inSourceMap;95var output = {};96if (typeof options.inSourceMap == "string") {97inMap = fs.readFileSync(options.inSourceMap, "utf8");98}99if (options.outSourceMap) {100output.source_map = UglifyJS.SourceMap({101file: options.outSourceMap,102orig: inMap,103root: options.sourceRoot104});105}106if (options.output) {107UglifyJS.merge(output, options.output);108}109var stream = UglifyJS.OutputStream(output);110toplevel.print(stream);111return {112code : stream + "",113map : output.source_map + ""114};115};116117// exports.describe_ast = function() {118// function doitem(ctor) {119// var sub = {};120// ctor.SUBCLASSES.forEach(function(ctor){121// sub[ctor.TYPE] = doitem(ctor);122// });123// var ret = {};124// if (ctor.SELF_PROPS.length > 0) ret.props = ctor.SELF_PROPS;125// if (ctor.SUBCLASSES.length > 0) ret.sub = sub;126// return ret;127// }128// return doitem(UglifyJS.AST_Node).sub;129// }130131exports.describe_ast = function() {132var out = UglifyJS.OutputStream({ beautify: true });133function doitem(ctor) {134out.print("AST_" + ctor.TYPE);135var props = ctor.SELF_PROPS.filter(function(prop){136return !/^\$/.test(prop);137});138if (props.length > 0) {139out.space();140out.with_parens(function(){141props.forEach(function(prop, i){142if (i) out.space();143out.print(prop);144});145});146}147if (ctor.documentation) {148out.space();149out.print_string(ctor.documentation);150}151if (ctor.SUBCLASSES.length > 0) {152out.space();153out.with_block(function(){154ctor.SUBCLASSES.forEach(function(ctor, i){155out.indent();156doitem(ctor);157out.newline();158});159});160}161};162doitem(UglifyJS.AST_Node);163return out + "";164};165166167