Created
October 2, 2018 13:22
-
-
Save tvhung83/fc9cc8b4d5ba0dc2eb4e75f545d1318d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
exports.unpack = function (p){var c=p;var a=10,x=1;while(x<a){c=unescape(c);if(/eval\(+function\(/.test(c)){c=this.depack(c);x++}else{break}};c=unescape(c);c=R(c,{indent_size:1,indent_char:'\t'});return c} | |
exports.depack = depack = function (p){if(p!=""){c=unescape(p);var _e=eval,s="eval=function(v){c=v;};"+c+";eval=_e;";eval(s)}else{c=p};return c} | |
exports.R = R = reformat = function (a, b) { | |
var d, e, f, g, h, j, k, l, m; | |
var o, p, q, r, s, u, v; | |
var w, x, y, z, aa, ab; | |
var ac; | |
a = C(a); | |
b = b || {}; | |
var ad = b.indent_size || 4; | |
var ae = b.indent_char || ' '; | |
var opt_preserve_newlines = typeof b.preserve_newlines === 'undefined' ? true: b.preserve_newlines; | |
var af = b.indent_level || 0; | |
function trim_output() { | |
while (e.length && (e[e.length - 1] === ' ' || e[e.length - 1] === m)) { | |
e.pop() | |
} | |
} | |
function print_newline(a) { | |
a = typeof a === 'undefined' ? true: a; | |
ab = false; | |
trim_output(); | |
if (!e.length) { | |
return | |
} | |
if (e[e.length - 1] !== "\n" || !a) { | |
e.push("\n") | |
} | |
for (var i = 0; i < ac; i += 1) { | |
e.push(m) | |
} | |
} | |
function print_space() { | |
var ag = ' '; | |
if (e.length) { | |
ag = e[e.length - 1] | |
} | |
if (ag !== ' ' && ag !== '\n' && ag !== m) { | |
e.push(' ') | |
} | |
} | |
function print_token() { | |
e.push(f) | |
} | |
function indent() { | |
ac += 1 | |
} | |
function unindent() { | |
if (ac) { | |
ac -= 1 | |
} | |
} | |
function remove_indent() { | |
if (e.length && e[e.length - 1] === m) { | |
e.pop() | |
} | |
} | |
function set_mode(a) { | |
l.push(k); | |
k = a | |
} | |
function restore_mode() { | |
y = k === 'DO_BLOCK'; | |
k = l.pop() | |
} | |
function in_array(a, b) { | |
for (var i = 0; i < b.length; i += 1) { | |
if (b[i] === a) { | |
return true | |
} | |
} | |
return false | |
} | |
function get_next_token() { | |
var ah = 0; | |
if (r >= d.length) { | |
return ['', 'TK_EOF'] | |
} | |
var c = d.charAt(r); | |
r += 1; | |
while (in_array(c, o)) { | |
if (r >= d.length) { | |
return ['', 'TK_EOF'] | |
} | |
if (c === "\n") { | |
ah += 1 | |
} | |
c = d.charAt(r); | |
r += 1 | |
} | |
var ai = false; | |
if (opt_preserve_newlines) { | |
if (ah > 1) { | |
for (var i = 0; i < 2; i += 1) { | |
print_newline(i === 0) | |
} | |
} | |
ai = (ah === 1) | |
} | |
if (in_array(c, p)) { | |
if (r < d.length) { | |
while (in_array(d.charAt(r), p)) { | |
c += d.charAt(r); | |
r += 1; | |
if (r === d.length) { | |
break | |
} | |
} | |
} | |
if (r !== d.length && c.match(/^[0-9]+[Ee]$/) && (d.charAt(r) === '-' || d.charAt(r) === '+')) { | |
var aj = d.charAt(r); | |
r += 1; | |
var t = get_next_token(r); | |
c += aj + t[0]; | |
return [c, 'TK_WORD'] | |
} | |
if (c === 'in') { | |
return [c, 'TK_OPERATOR'] | |
} | |
if (ai && g !== 'TK_OPERATOR' && !ab) { | |
print_newline() | |
} | |
return [c, 'TK_WORD'] | |
} | |
if (c === '(' || c === '[') { | |
return [c, 'TK_START_EXPR'] | |
} | |
if (c === ')' || c === ']') { | |
return [c, 'TK_END_EXPR'] | |
} | |
if (c === '{') { | |
return [c, 'TK_START_BLOCK'] | |
} | |
if (c === '}') { | |
return [c, 'TK_END_BLOCK'] | |
} | |
if (c === ';') { | |
return [c, 'TK_SEMICOLON'] | |
} | |
if (c === '/') { | |
var ak = ''; | |
if (d.charAt(r) === '*') { | |
r += 1; | |
if (r < d.length) { | |
while (! (d.charAt(r) === '*' && d.charAt(r + 1) && d.charAt(r + 1) === '/') && r < d.length) { | |
ak += d.charAt(r); | |
r += 1; | |
if (r >= d.length) { | |
break | |
} | |
} | |
} | |
r += 2; | |
return ['/*' + ak + '*/', 'TK_BLOCK_COMMENT'] | |
} | |
if (d.charAt(r) === '/') { | |
ak = c; | |
while (d.charAt(r) !== "\x0d" && d.charAt(r) !== "\x0a") { | |
ak += d.charAt(r); | |
r += 1; | |
if (r >= d.length) { | |
break | |
} | |
} | |
r += 1; | |
if (ai) { | |
print_newline() | |
} | |
return [ak, 'TK_COMMENT'] | |
} | |
} | |
if (c === "'" || c === '"' || (c === '/' && ((g === 'TK_WORD' && h === 'return') || (g === 'TK_START_EXPR' || g === 'TK_START_BLOCK' || g === 'TK_END_BLOCK' || g === 'TK_OPERATOR' || g === 'TK_EOF' || g === 'TK_SEMICOLON')))) { | |
var al = c; | |
var am = false; | |
var an = c; | |
if (r < d.length) { | |
while (am || d.charAt(r) !== al) { | |
an += d.charAt(r); | |
if (!am) { | |
am = d.charAt(r) === '\\' | |
} else { | |
am = false | |
} | |
r += 1; | |
if (r >= d.length) { | |
return [an, 'TK_STRING'] | |
} | |
} | |
} | |
r += 1; | |
an += al; | |
if (al === '/') { | |
while (r < d.length && in_array(d.charAt(r), p)) { | |
an += d.charAt(r); | |
r += 1 | |
} | |
} | |
return [an, 'TK_STRING'] | |
} | |
if (c === '#') { | |
var ao = '#'; | |
if (r < d.length && in_array(d.charAt(r), v)) { | |
do { | |
c = d.charAt(r); | |
ao += c; | |
r += 1 | |
} while (r < d.length && c !== '#' && c !== '='); | |
if (c === '#') { | |
return [ao, 'TK_WORD'] | |
} else { | |
return [ao, 'TK_OPERATOR'] | |
} | |
} | |
} | |
if (c === '<' && d.substring(r - 1, r + 3) === '<!--') { | |
r += 3; | |
return ['<!--', 'TK_COMMENT'] | |
} | |
if (c === '-' && d.substring(r - 1, r + 2) === '-->') { | |
r += 2; | |
if (ai) { | |
print_newline() | |
} | |
return ['-->', 'TK_COMMENT'] | |
} | |
if (in_array(c, q)) { | |
while (r < d.length && in_array(c + d.charAt(r), q)) { | |
c += d.charAt(r); | |
r += 1; | |
if (r >= d.length) { | |
break | |
} | |
} | |
return [c, 'TK_OPERATOR'] | |
} | |
return [c, 'TK_UNKNOWN'] | |
} | |
m = ''; | |
while (ad > 0) { | |
m += ae; | |
ad -= 1 | |
} | |
ac = af; | |
d = a; | |
j = ''; | |
g = 'TK_START_EXPR'; | |
h = ''; | |
e = []; | |
y = false; | |
z = false; | |
aa = false; | |
o = "\n\r\t ".split(''); | |
p = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$'.split(''); | |
v = '0123456789'.split(''); | |
q = '+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! !! , : ? ^ ^= |= ::'.split(' '); | |
s = 'continue,try,throw,return,var,if,switch,case,default,for,while,break,function'.split(','); | |
k = 'BLOCK'; | |
l = [k]; | |
r = 0; | |
u = false; | |
while (true) { | |
var t = get_next_token(r); | |
f = t[0]; | |
x = t[1]; | |
if (x === 'TK_EOF') { | |
break | |
} | |
switch (x) { | |
case 'TK_START_EXPR': | |
z = false; | |
set_mode('EXPRESSION'); | |
if (h === ';') { | |
print_newline() | |
} else if (g === 'TK_END_EXPR' || g === 'TK_START_EXPR') {} else if (g !== 'TK_WORD' && g !== 'TK_OPERATOR') { | |
print_space() | |
} else if (in_array(j, s)) { | |
print_space() | |
} | |
print_token(); | |
break; | |
case 'TK_END_EXPR': | |
print_token(); | |
restore_mode(); | |
break; | |
case 'TK_START_BLOCK': | |
if (j === 'do') { | |
set_mode('DO_BLOCK') | |
} else { | |
set_mode('BLOCK') | |
} | |
if (g !== 'TK_OPERATOR' && g !== 'TK_START_EXPR') { | |
if (g === 'TK_START_BLOCK') { | |
print_newline() | |
} else { | |
print_space() | |
} | |
} | |
print_token(); | |
indent(); | |
break; | |
case 'TK_END_BLOCK': | |
if (g === 'TK_START_BLOCK') { | |
trim_output(); | |
unindent() | |
} else { | |
unindent(); | |
print_newline() | |
} | |
print_token(); | |
restore_mode(); | |
break; | |
case 'TK_WORD': | |
if (y) { | |
print_space(); | |
print_token(); | |
print_space(); | |
y = false; | |
break | |
} | |
if (f === 'case' || f === 'default') { | |
if (h === ':') { | |
remove_indent() | |
} else { | |
unindent(); | |
print_newline(); | |
indent() | |
} | |
print_token(); | |
u = true; | |
break | |
} | |
w = 'NONE'; | |
if (g === 'TK_END_BLOCK') { | |
if (!in_array(f.toLowerCase(), ['else', 'catch', 'finally'])) { | |
w = 'NEWLINE' | |
} else { | |
w = 'SPACE'; | |
print_space() | |
} | |
} else if (g === 'TK_SEMICOLON' && (k === 'BLOCK' || k === 'DO_BLOCK')) { | |
w = 'NEWLINE' | |
} else if (g === 'TK_SEMICOLON' && k === 'EXPRESSION') { | |
w = 'SPACE' | |
} else if (g === 'TK_STRING') { | |
w = 'NEWLINE' | |
} else if (g === 'TK_WORD') { | |
w = 'SPACE' | |
} else if (g === 'TK_START_BLOCK') { | |
w = 'NEWLINE' | |
} else if (g === 'TK_END_EXPR') { | |
print_space(); | |
w = 'NEWLINE' | |
} | |
if (g !== 'TK_END_BLOCK' && in_array(f.toLowerCase(), ['else', 'catch', 'finally'])) { | |
print_newline() | |
} else if (in_array(f, s) || w === 'NEWLINE') { | |
if (h === 'else') { | |
print_space() | |
} else if ((g === 'TK_START_EXPR' || h === '=' || h === ',') && f === 'function') {} else if (g === 'TK_WORD' && (h === 'return' || h === 'throw')) { | |
print_space() | |
} else if (g !== 'TK_END_EXPR') { | |
if ((g !== 'TK_START_EXPR' || f !== 'var') && h !== ':') { | |
if (f === 'if' && g === 'TK_WORD' && j === 'else') { | |
print_space() | |
} else { | |
print_newline() | |
} | |
} | |
} else { | |
if (in_array(f, s) && h !== ')') { | |
print_newline() | |
} | |
} | |
} else if (w === 'SPACE') { | |
print_space() | |
} | |
print_token(); | |
j = f; | |
if (f === 'var') { | |
z = true; | |
aa = false | |
} | |
if (f === 'if' || f === 'else') { | |
ab = true | |
} | |
break; | |
case 'TK_SEMICOLON': | |
print_token(); | |
z = false; | |
break; | |
case 'TK_STRING': | |
if (g === 'TK_START_BLOCK' || g === 'TK_END_BLOCK' || g === 'TK_SEMICOLON') { | |
print_newline() | |
} else if (g === 'TK_WORD') { | |
print_space() | |
} | |
print_token(); | |
break; | |
case 'TK_OPERATOR': | |
var ap = true; | |
var aq = true; | |
if (z && f !== ',') { | |
aa = true; | |
if (f === ':') { | |
z = false | |
} | |
} | |
if (z && f === ',' && k === 'EXPRESSION') { | |
aa = false | |
} | |
if (f === ':' && u) { | |
print_token(); | |
print_newline(); | |
break | |
} | |
if (f === '::') { | |
print_token(); | |
break | |
} | |
u = false; | |
if (f === ',') { | |
if (z) { | |
if (aa) { | |
print_token(); | |
print_newline(); | |
aa = false | |
} else { | |
print_token(); | |
print_space() | |
} | |
} else if (g === 'TK_END_BLOCK') { | |
print_token(); | |
print_newline() | |
} else { | |
if (k === 'BLOCK') { | |
print_token(); | |
print_newline() | |
} else { | |
print_token(); | |
print_space() | |
} | |
} | |
break | |
} else if (f === '--' || f === '++') { | |
if (h === ';') { | |
ap = true; | |
aq = false | |
} else { | |
ap = false; | |
aq = false | |
} | |
} else if (f === '!' && g === 'TK_START_EXPR') { | |
ap = false; | |
aq = false | |
} else if (g === 'TK_OPERATOR') { | |
ap = false; | |
aq = false | |
} else if (g === 'TK_END_EXPR') { | |
ap = true; | |
aq = true | |
} else if (f === '.') { | |
ap = false; | |
aq = false | |
} else if (f === ':') { | |
if (h.match(/^\d+$/)) { | |
ap = true | |
} else { | |
ap = false | |
} | |
} | |
if (ap) { | |
print_space() | |
} | |
print_token(); | |
if (aq) { | |
print_space() | |
} | |
break; | |
case 'TK_BLOCK_COMMENT': | |
print_newline(); | |
print_token(); | |
print_newline(); | |
break; | |
case 'TK_COMMENT': | |
print_space(); | |
print_token(); | |
print_newline(); | |
break; | |
case 'TK_UNKNOWN': | |
print_token(); | |
break | |
} | |
g = x; | |
h = f | |
} | |
var ar = e.join('').replace(/\n+$/, ''); | |
return ar | |
} | |
exports.C = C = function (m) { | |
var r, re = false; | |
var fn = (m.match(/(^|\n|\W|\s|[,;])([_\$a-z1-9]+)=function\(i\)\{return (?:_d|document)\.getElementById\(i\)\}/i) || [])[2]; | |
if (fn) { | |
re = fn + "=function\\(i\\)\\{return (?:_d|document)\\.getElementById\\(i\\)\\}"; | |
r = new RegExp(re, "gi"); | |
m = m.replace(r, ""); | |
re = "([^-.a-z1-9_])(" + fn + "\\()"; | |
r = new RegExp(re, "g"); | |
m = m.replace(r, "$1document.getElementById("); | |
} | |
//my compressor always put this line at top! so safe to replace | |
if(/^var _w=window,_n=navigator,_d=document;\n/.test(m)){ | |
m=m.replace(/^var _w=window,_n=navigator,_d=document;\n/,""); | |
m = m.replace(/(^|[\s,\|&;\?\:\!=\[\(\{\)\}\+\#])(_n)(\W|$)/g, "$1navigator$3"); | |
m = m.replace(/(^|[\s,\|&;\?\:\!=\[\(\{\)\}\+\#])(_d)(\W|$)/g, "$1document$3"); | |
m = m.replace(/(^|[\s,\|&;\?\:\!=\[\(\{\)\}\+\#])(_w)(\W|$)/g, "$1window$3"); | |
} | |
return m; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment