| 
									
										
										
										
											2014-05-29 19:44:30 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 20:58:16 +02:00
										 |  |  | var uglifyjs = require('uglify-js'); | 
					
						
							|  |  |  | var async = require('async'); | 
					
						
							|  |  |  | var fs = require('fs'); | 
					
						
							|  |  |  | var file = require('./src/file'); | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:32 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 20:58:16 +02:00
										 |  |  | var Minifier = { | 
					
						
							|  |  |  | 	js: {} | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-04-03 15:35:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Javascript */ | 
					
						
							| 
									
										
										
										
											2014-11-26 21:30:24 -05:00
										 |  |  | Minifier.js.minify = function (scripts, minify, callback) { | 
					
						
							| 
									
										
										
										
											2016-02-01 20:58:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	scripts = scripts.filter(function (file) { | 
					
						
							| 
									
										
										
										
											2015-09-29 18:22:41 -04:00
										 |  |  | 		return file && file.endsWith('.js'); | 
					
						
							| 
									
										
										
										
											2014-06-14 20:34:26 -04:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	async.filter(scripts, function (script, next) { | 
					
						
							|  |  |  | 		file.exists(script, function (exists) { | 
					
						
							| 
									
										
										
										
											2016-02-01 20:58:16 +02:00
										 |  |  | 			if (!exists) { | 
					
						
							|  |  |  | 				console.warn('[minifier] file not found, ' + script); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			next(exists); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	}, function (scripts) { | 
					
						
							| 
									
										
										
										
											2015-09-29 18:22:41 -04:00
										 |  |  | 		if (minify) { | 
					
						
							|  |  |  | 			minifyScripts(scripts, callback); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			concatenateScripts(scripts, callback); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | process.on('message', function (payload) { | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 	switch(payload.action) { | 
					
						
							|  |  |  | 	case 'js': | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		Minifier.js.minify(payload.scripts, payload.minify, function (minified/*, sourceMap*/) { | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 			process.send({ | 
					
						
							|  |  |  | 				type: 'end', | 
					
						
							| 
									
										
										
										
											2015-07-06 13:19:09 -04:00
										 |  |  | 				// sourceMap: sourceMap,
 | 
					
						
							| 
									
										
										
										
											2014-11-26 21:30:24 -05:00
										 |  |  | 				minified: minified | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-26 21:30:24 -05:00
										 |  |  | function minifyScripts(scripts, callback) { | 
					
						
							| 
									
										
										
										
											2015-07-06 13:19:09 -04:00
										 |  |  | 	// The portions of code involving the source map are commented out as they're broken in UglifyJS2
 | 
					
						
							|  |  |  | 	// Follow along here: https://github.com/mishoo/UglifyJS2/issues/700
 | 
					
						
							| 
									
										
										
										
											2014-04-03 17:27:26 -04:00
										 |  |  | 	try { | 
					
						
							| 
									
										
										
										
											2014-11-26 21:30:24 -05:00
										 |  |  | 		var minified = uglifyjs.minify(scripts, { | 
					
						
							| 
									
										
										
										
											2015-07-06 13:19:09 -04:00
										 |  |  | 				// outSourceMap: "nodebb.min.js.map",
 | 
					
						
							| 
									
										
										
										
											2014-11-26 21:30:24 -05:00
										 |  |  | 				compress: false | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:32 -04:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2014-07-28 15:25:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-06 13:19:09 -04:00
										 |  |  | 		callback(minified.code/*, minified.map*/); | 
					
						
							| 
									
										
										
										
											2014-04-03 17:27:26 -04:00
										 |  |  | 	} catch(err) { | 
					
						
							| 
									
										
										
										
											2014-07-28 15:25:04 -04:00
										 |  |  | 		process.send({ | 
					
						
							|  |  |  | 			type: 'error', | 
					
						
							| 
									
										
										
										
											2016-02-01 20:58:16 +02:00
										 |  |  | 			message: err.message | 
					
						
							| 
									
										
										
										
											2014-07-28 15:25:04 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2014-04-03 17:27:26 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-04-03 15:35:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-26 21:30:24 -05:00
										 |  |  | function concatenateScripts(scripts, callback) { | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	async.map(scripts, fs.readFile, function (err, scripts) { | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 		if (err) { | 
					
						
							| 
									
										
										
										
											2014-07-28 15:25:04 -04:00
										 |  |  | 			process.send({ | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 				type: 'error', | 
					
						
							| 
									
										
										
										
											2016-02-01 20:58:16 +02:00
										 |  |  | 				message: err.message | 
					
						
							| 
									
										
										
										
											2014-07-28 15:25:04 -04:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2015-10-06 14:05:13 -04:00
										 |  |  | 			return; | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-20 13:22:39 -05:00
										 |  |  | 		scripts = scripts.join(require('os').EOL + ';'); | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-26 21:30:24 -05:00
										 |  |  | 		callback(scripts); | 
					
						
							| 
									
										
										
										
											2014-11-11 13:30:16 -05:00
										 |  |  | 	}); | 
					
						
							|  |  |  | } |