1'use strict' 2 3var fs = require('fs') 4var PassThrough = require('stream').PassThrough 5var Transform = require('stream').Transform 6 7if (typeof Transform === 'undefined') { 8 throw new Error('UglifyJS only supports browserify when using node >= 0.10.x') 9} 10 11var cache = {} 12module.exports = transform 13function transform(file) { 14 if (!/tools\/node\.js$/.test(file.replace(/\\/g,'/'))) return new PassThrough(); 15 if (cache[file]) return makeStream(cache[file]) 16 var uglify = require(file) 17 var src = 'var sys = require("util");\nvar MOZ_SourceMap = require("source-map");\nvar UglifyJS = exports;\n' + uglify.FILES.map(function (path) { return fs.readFileSync(path, 'utf8') }).join('\n') 18 19 var ast = uglify.parse(src) 20 ast.figure_out_scope() 21 22 var variables = ast.variables 23 .map(function (node, name) { 24 return name 25 }) 26 27 src += '\n\n' + variables.map(function (v) { return 'exports.' + v + ' = ' + v + ';' }).join('\n') + '\n\n' 28 29 src += 'exports.AST_Node.warn_function = function (txt) { if (typeof console != "undefined" && typeof console.warn === "function") console.warn(txt) }\n\n' 30 31 src += 'exports.minify = ' + uglify.minify.toString() + ';\n\n' 32 src += 'exports.describe_ast = ' + uglify.describe_ast.toString() + ';' 33 34 // TODO: remove once https://github.com/substack/node-browserify/issues/631 is resolved 35 src = src.replace(/"for"/g, '"fo" + "r"') 36 37 cache[file] = src 38 return makeStream(src); 39} 40 41function makeStream(src) { 42 var res = new Transform(); 43 res._transform = function (chunk, encoding, callback) { callback() } 44 res._flush = function (callback) { 45 res.push(src) 46 callback() 47 } 48 return res; 49} 50