Skip to content
This repository has been archived by the owner on Apr 10, 2024. It is now read-only.

Commit

Permalink
added uglify to build
Browse files Browse the repository at this point in the history
  • Loading branch information
Rob Griffiths committed Dec 6, 2010
1 parent 8290033 commit e110e16
Show file tree
Hide file tree
Showing 2 changed files with 198 additions and 1 deletion.
13 changes: 12 additions & 1 deletion Makefile
Expand Up @@ -30,12 +30,13 @@ REV = sed 's/@REV/${REVISION}/'
JSOA_DEBUG = ${DIST_DIR}/jsOAuth.js
JSOA_PRODUCTION = ${DIST_DIR}/jsOAuth-${VERSION}.js
JSOA_PRODUCTION_MIN = ${DIST_DIR}/jsOAuth-${VERSION}.min.js
JSOA_PRODUCTION_UGLY = ${DIST_DIR}/jsOAuth-${VERSION}.ugly.js
JSOA_PRODUCTION_COMPILED = ${DIST_DIR}/jsOAuth-${VERSION}.compiled.js
JSOA_COMMONJS = ${COMMONJS_LIB_DIR}/jsOAuth.js

all: jsoauth commonjs

jsoauth: ${DIST_DIR} ${JSOA_PRODUCTION} ${JSOA_PRODUCTION_MIN} ${JSOA_PRODUCTION_COMPILED}
jsoauth: ${DIST_DIR} ${JSOA_PRODUCTION} ${JSOA_PRODUCTION_MIN} ${JSOA_PRODUCTION_UGLY} ${JSOA_PRODUCTION_COMPILED}

${DIST_DIR}:
@@mkdir -p ${DIST_DIR}
Expand Down Expand Up @@ -81,6 +82,16 @@ ${JSOA_PRODUCTION_MIN}: ${JSOA_PRODUCTION}
@@echo "Shrink complete."
@@echo ""

${JSOA_PRODUCTION_UGLY}: ${JSOA_PRODUCTION}
@@echo "Uglifying ${JSOA_PRODUCTION} > ${JSOA_PRODUCTION_UGLY}"
@${BUILD_DIR}/uglifyjs \
--unsafe \
-o ${JSOA_PRODUCTION_UGLY} \
-v \
${JSOA_PRODUCTION}
@@echo "Uglify complete."
@@echo ""

${JSOA_COMMONJS}: ${JSOA_PRODUCTION_MIN}
@@echo "Building CommonJS / Node.JS module"
@@mkdir -p ${COMMONJS_LIB_DIR}
Expand Down
186 changes: 186 additions & 0 deletions build/uglifyjs
@@ -0,0 +1,186 @@
#! /usr/bin/env node
// -*- js2 -*-

global.sys = require(/^v0\.[012]/.test(process.version) ? "sys" : "util");
var fs = require("fs");
var uglify = require("uglify-js"), // symlink ~/.node_libraries/uglify-js.js to ../index.js
jsp = uglify.parser,
pro = uglify.uglify;

var options = {
ast: false,
mangle: true,
mangle_toplevel: false,
squeeze: true,
make_seqs: true,
dead_code: true,
beautify: false,
verbose: false,
show_copyright: true,
out_same_file: false,
extra: false,
beautify_options: {
indent_level: 4,
indent_start: 0,
quote_keys: false,
space_colon: false
},
output: true // stdout
};

var args = jsp.slice(process.argv, 2);
var filename;

out: while (args.length > 0) {
var v = args.shift();
switch (v) {
case "-b":
case "--beautify":
options.beautify = true;
break;
case "-i":
case "--indent":
options.beautify_options.indent_level = args.shift();
break;
case "-q":
case "--quote-keys":
options.beautify_options.quote_keys = true;
break;
case "-mt":
case "--mangle-toplevel":
options.mangle_toplevel = true;
break;
case "--no-mangle":
case "-nm":
options.mangle = false;
break;
case "--no-squeeze":
case "-ns":
options.squeeze = false;
break;
case "--no-seqs":
options.make_seqs = false;
break;
case "--no-dead-code":
options.dead_code = false;
break;
case "--no-copyright":
case "-nc":
options.show_copyright = false;
break;
case "-o":
case "--output":
options.output = args.shift();
break;
case "--overwrite":
options.out_same_file = true;
break;
case "-v":
case "--verbose":
options.verbose = true;
break;
case "--ast":
options.ast = true;
break;
case "--extra":
options.extra = true;
break;
default:
filename = v;
break out;
}
}

if (filename) {
fs.readFile(filename, "utf8", function(err, text){
output(squeeze_it(text));
});
} else {
var stdin = process.openStdin();
stdin.setEncoding("utf8");
var text = "";
stdin.on("data", function(chunk){
text += chunk;
});
stdin.on("end", function() {
output(squeeze_it(text));
});
}

function output(text) {
var out;
if (options.out_same_file && filename)
options.output = filename;
if (options.output === true) {
out = process.stdout;
} else {
out = fs.createWriteStream(options.output, {
flags: "w",
encoding: "utf8",
mode: 0644
});
}
out.write(text);
out.end();
};

// --------- main ends here.

function show_copyright(comments) {
var ret = "";
for (var i = 0; i < comments.length; ++i) {
var c = comments[i];
if (c.type == "comment1") {
ret += "//" + c.value + "\n";
} else {
ret += "/*" + c.value + "*/";
}
}
return ret;
};

function squeeze_it(code) {
var result = "";
if (options.show_copyright) {
var initial_comments = [];
// keep first comment
var tok = jsp.tokenizer(code, false), c;
c = tok();
var prev = null;
while (/^comment/.test(c.type) && (!prev || prev == c.type)) {
initial_comments.push(c);
prev = c.type;
c = tok();
}
result += show_copyright(initial_comments);
}
try {
var ast = time_it("parse", function(){ return jsp.parse(code); });
if (options.squeeze)
ast = time_it("squeeze", function(){
return pro.ast_squeeze(ast, {
make_seqs : options.make_seqs,
dead_code : options.dead_code,
extra : options.extra
});
});
if (options.mangle)
ast = time_it("mangle", function(){ return pro.ast_mangle(ast, options.mangle_toplevel); });
if (options.ast)
return sys.inspect(ast, null, null);
result += time_it("generate", function(){ return pro.gen_code(ast, options.beautify && options.beautify_options) });
return result;
} catch(ex) {
sys.debug(ex.stack);
sys.debug(sys.inspect(ex));
sys.debug(JSON.stringify(ex));
}
};

function time_it(name, cont) {
if (!options.verbose)
return cont();
var t1 = new Date().getTime();
try { return cont(); }
finally { sys.debug("// " + name + ": " + ((new Date().getTime() - t1) / 1000).toFixed(3) + " sec."); }
};

0 comments on commit e110e16

Please sign in to comment.