react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / umd / node_modules / ruglify / node_modules / uglify-js / tools / node.js
80760 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 map = null;95var inMap = null;96if (options.inSourceMap) {97inMap = fs.readFileSync(options.inSourceMap, "utf8");98}99if (options.outSourceMap) map = UglifyJS.SourceMap({100file: options.outSourceMap,101orig: inMap,102root: options.sourceRoot103});104var output = { source_map: map };105if (options.output) {106UglifyJS.merge(output, options.output);107}108var stream = UglifyJS.OutputStream(output);109toplevel.print(stream);110return {111code : stream + "",112map : map + ""113};114};115116// exports.describe_ast = function() {117// function doitem(ctor) {118// var sub = {};119// ctor.SUBCLASSES.forEach(function(ctor){120// sub[ctor.TYPE] = doitem(ctor);121// });122// var ret = {};123// if (ctor.SELF_PROPS.length > 0) ret.props = ctor.SELF_PROPS;124// if (ctor.SUBCLASSES.length > 0) ret.sub = sub;125// return ret;126// }127// return doitem(UglifyJS.AST_Node).sub;128// }129130exports.describe_ast = function() {131var out = UglifyJS.OutputStream({ beautify: true });132function doitem(ctor) {133out.print("AST_" + ctor.TYPE);134var props = ctor.SELF_PROPS.filter(function(prop){135return !/^\$/.test(prop);136});137if (props.length > 0) {138out.space();139out.with_parens(function(){140props.forEach(function(prop, i){141if (i) out.space();142out.print(prop);143});144});145}146if (ctor.documentation) {147out.space();148out.print_string(ctor.documentation);149}150if (ctor.SUBCLASSES.length > 0) {151out.space();152out.with_block(function(){153ctor.SUBCLASSES.forEach(function(ctor, i){154out.indent();155doitem(ctor);156out.newline();157});158});159}160};161doitem(UglifyJS.AST_Node);162return out + "";163};164165166