50 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| var fs = require('fs')
 | |
| var PassThrough = require('stream').PassThrough
 | |
| var Transform = require('stream').Transform
 | |
| 
 | |
| if (typeof Transform === 'undefined') {
 | |
|   throw new Error('UglifyJS only supports browserify when using node >= 0.10.x')
 | |
| }
 | |
| 
 | |
| var cache = {}
 | |
| module.exports = transform
 | |
| function transform(file) {
 | |
|   if (!/tools\/node\.js$/.test(file.replace(/\\/g,'/'))) return new PassThrough();
 | |
|   if (cache[file]) return makeStream(cache[file])
 | |
|   var uglify = require(file)
 | |
|   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')
 | |
| 
 | |
|   var ast = uglify.parse(src)
 | |
|   ast.figure_out_scope()
 | |
| 
 | |
|   var variables = ast.variables
 | |
|     .map(function (node, name) {
 | |
|       return name
 | |
|     })
 | |
| 
 | |
|   src += '\n\n' + variables.map(function (v) { return 'exports.' + v + ' = ' + v + ';' }).join('\n') + '\n\n'
 | |
| 
 | |
|   src += 'exports.AST_Node.warn_function = function (txt) { if (typeof console != "undefined" && typeof console.warn === "function") console.warn(txt) }\n\n'
 | |
| 
 | |
|   src += 'exports.minify = ' + uglify.minify.toString() + ';\n\n'
 | |
|   src += 'exports.describe_ast = ' + uglify.describe_ast.toString() + ';'
 | |
| 
 | |
|   // TODO: remove once https://github.com/substack/node-browserify/issues/631 is resolved
 | |
|   src = src.replace(/"for"/g, '"fo" + "r"')
 | |
| 
 | |
|   cache[file] = src
 | |
|   return makeStream(src);
 | |
| }
 | |
| 
 | |
| function makeStream(src) {
 | |
|   var res = new Transform();
 | |
|   res._transform = function (chunk, encoding, callback) { callback() }
 | |
|   res._flush = function (callback) {
 | |
|     res.push(src)
 | |
|     callback()
 | |
|   }
 | |
|   return res;
 | |
| }
 |