js-beautify 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.document +5 -0
  2. data/.gitmodules +4 -0
  3. data/Gemfile +13 -0
  4. data/Gemfile.lock +27 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +13 -0
  7. data/Rakefile +29 -0
  8. data/VERSION +1 -0
  9. data/bin/js-beautify +5 -0
  10. data/init.sh +3 -0
  11. data/js-beautify-copy/.gitmodules +3 -0
  12. data/js-beautify-copy/Makefile +71 -0
  13. data/js-beautify-copy/README.md +39 -0
  14. data/js-beautify-copy/attic/beautify-cl/beautify-cl.js +142 -0
  15. data/js-beautify-copy/attic/bin/beautify_js +80 -0
  16. data/js-beautify-copy/attic/opera-userscript/beautifier.js +1087 -0
  17. data/js-beautify-copy/attic/opera-userscript/make_opera_userscript.sh +42 -0
  18. data/js-beautify-copy/attic/qtscript/jsbeautify.cpp +121 -0
  19. data/js-beautify-copy/attic/qtscript/jsbeautify.pro +5 -0
  20. data/js-beautify-copy/attic/qtscript/jsbeautify.qrc +6 -0
  21. data/js-beautify-copy/attic/qtscript/readme.txt +28 -0
  22. data/js-beautify-copy/attic/readme.txt +2 -0
  23. data/js-beautify-copy/attic/unmaintained/bbedit/jsBeautify_BBED.scpt +522 -0
  24. data/js-beautify-copy/attic/unmaintained/c-sharp/JSBeautify.cs +801 -0
  25. data/js-beautify-copy/attic/v8/README.txt +40 -0
  26. data/js-beautify-copy/attic/v8/beautify.h +2390 -0
  27. data/js-beautify-copy/attic/v8/jsbeautify.cpp +215 -0
  28. data/js-beautify-copy/beautify-css.js +198 -0
  29. data/js-beautify-copy/beautify-html.js +514 -0
  30. data/js-beautify-copy/beautify.js +1293 -0
  31. data/js-beautify-copy/favicon.png +0 -0
  32. data/js-beautify-copy/index.html +401 -0
  33. data/js-beautify-copy/jquery/jquery.cookie.js +96 -0
  34. data/js-beautify-copy/jquery/jquery.js +167 -0
  35. data/js-beautify-copy/license.txt +24 -0
  36. data/js-beautify-copy/php/jsbeautifier.php +1599 -0
  37. data/js-beautify-copy/php/test.php +476 -0
  38. data/js-beautify-copy/python/MANIFEST.in +2 -0
  39. data/js-beautify-copy/python/js-beautify +7 -0
  40. data/js-beautify-copy/python/js-beautify-profile +16 -0
  41. data/js-beautify-copy/python/js-beautify-test +10 -0
  42. data/js-beautify-copy/python/jsbeautifier/__init__.py +1166 -0
  43. data/js-beautify-copy/python/jsbeautifier/tests/__init__.py +1 -0
  44. data/js-beautify-copy/python/jsbeautifier/tests/testindentation.py +43 -0
  45. data/js-beautify-copy/python/jsbeautifier/tests/testjsbeautifier.py +464 -0
  46. data/js-beautify-copy/python/jsbeautifier/unpackers/README.specs.mkd +25 -0
  47. data/js-beautify-copy/python/jsbeautifier/unpackers/__init__.py +67 -0
  48. data/js-beautify-copy/python/jsbeautifier/unpackers/evalbased.py +39 -0
  49. data/js-beautify-copy/python/jsbeautifier/unpackers/javascriptobfuscator.py +58 -0
  50. data/js-beautify-copy/python/jsbeautifier/unpackers/myobfuscate.py +86 -0
  51. data/js-beautify-copy/python/jsbeautifier/unpackers/packer.py +104 -0
  52. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/__init__.py +2 -0
  53. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-input.js +1 -0
  54. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-output.js +65 -0
  55. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-62-input.js +1 -0
  56. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-non62-input.js +1 -0
  57. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testjavascriptobfuscator.py +46 -0
  58. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testmyobfuscate.py +40 -0
  59. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testpacker.py +34 -0
  60. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testurlencode.py +36 -0
  61. data/js-beautify-copy/python/jsbeautifier/unpackers/urlencode.py +34 -0
  62. data/js-beautify-copy/python/setup.py +17 -0
  63. data/js-beautify-copy/tests/beautify-tests.js +489 -0
  64. data/js-beautify-copy/tests/run-tests +17 -0
  65. data/js-beautify-copy/tests/sanitytest.js +128 -0
  66. data/js-beautify-copy/unpackers/javascriptobfuscator_unpacker.js +103 -0
  67. data/js-beautify-copy/unpackers/myobfuscate_unpacker.js +81 -0
  68. data/js-beautify-copy/unpackers/p_a_c_k_e_r_unpacker.js +61 -0
  69. data/js-beautify-copy/unpackers/urlencode_unpacker.js +51 -0
  70. data/lib/js-beautify.rb +0 -0
  71. data/test/helper.rb +18 -0
  72. data/test/test_js-beautify.rb +7 -0
  73. data/update.sh +23 -0
  74. metadata +173 -0
@@ -0,0 +1,25 @@
1
+ # UNPACKERS SPECIFICATIONS
2
+
3
+ Nothing very difficult: an unpacker is a submodule placed in the directory
4
+ where this file was found. Each unpacker must define three symbols:
5
+
6
+ * `PRIORITY` : integer number expressing the priority in applying this
7
+ unpacker. Lower number means higher priority.
8
+ Makes sense only if a source file has been packed with
9
+ more than one packer.
10
+ * `detect(source)` : returns `True` if source is packed, otherwise, `False`.
11
+ * `unpack(source)` : takes a `source` string and unpacks it. Must always return
12
+ valid JavaScript. That is to say, your code should look
13
+ like:
14
+
15
+ ```
16
+ if detect(source):
17
+ return do_your_fancy_things_with(source)
18
+ else:
19
+ return source
20
+ ```
21
+
22
+ *You can safely define any other symbol in your module, as it will be ignored.*
23
+
24
+ `__init__` code will automatically load new unpackers, without any further step
25
+ to be accomplished. Simply drop it in this directory.
@@ -0,0 +1,67 @@
1
+ #
2
+ # General code for JSBeautifier unpackers infrastructure. See README.specs
3
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
4
+ #
5
+
6
+ """General code for JSBeautifier unpackers infrastructure."""
7
+
8
+ import pkgutil
9
+ import re
10
+ from jsbeautifier.unpackers import evalbased
11
+
12
+ # NOTE: AT THE MOMENT, IT IS DEACTIVATED FOR YOUR SECURITY: it runs js!
13
+ BLACKLIST = ['jsbeautifier.unpackers.evalbased']
14
+
15
+ class UnpackingError(Exception):
16
+ """Badly packed source or general error. Argument is a
17
+ meaningful description."""
18
+ pass
19
+
20
+ def getunpackers():
21
+ """Scans the unpackers dir, finds unpackers and add them to UNPACKERS list.
22
+ An unpacker will be loaded only if it is a valid python module (name must
23
+ adhere to naming conventions) and it is not blacklisted (i.e. inserted
24
+ into BLACKLIST."""
25
+ path = __path__
26
+ prefix = __name__ + '.'
27
+ unpackers = []
28
+ interface = ['unpack', 'detect', 'PRIORITY']
29
+ for _importer, modname, _ispkg in pkgutil.iter_modules(path, prefix):
30
+ if 'tests' not in modname and modname not in BLACKLIST:
31
+ try:
32
+ module = __import__(modname, fromlist=interface)
33
+ except ImportError:
34
+ raise UnpackingError('Bad unpacker: %s' % modname)
35
+ else:
36
+ unpackers.append(module)
37
+
38
+ return sorted(unpackers, key = lambda mod: mod.PRIORITY)
39
+
40
+ UNPACKERS = getunpackers()
41
+
42
+ def run(source, evalcode=False):
43
+ """Runs the applicable unpackers and return unpacked source as a string."""
44
+ for unpacker in [mod for mod in UNPACKERS if mod.detect(source)]:
45
+ source = unpacker.unpack(source)
46
+ if evalcode and evalbased.detect(source):
47
+ source = evalbased.unpack(source)
48
+ return source
49
+
50
+ def filtercomments(source):
51
+ """NOT USED: strips trailing comments and put them at the top."""
52
+ trailing_comments = []
53
+ comment = True
54
+
55
+ while comment:
56
+ if re.search(r'^\s*\/\*', source):
57
+ comment = source[0, source.index('*/') + 2]
58
+ elif re.search(r'^\s*\/\/', source):
59
+ comment = re.search(r'^\s*\/\/', source).group(0)
60
+ else:
61
+ comment = None
62
+
63
+ if comment:
64
+ source = re.sub(r'^\s+', '', source[len(comment):])
65
+ trailing_comments.append(comment)
66
+
67
+ return '\n'.join(trailing_comments) + source
@@ -0,0 +1,39 @@
1
+ #
2
+ # Unpacker for eval() based packers, a part of javascript beautifier
3
+ # by Einar Lielmanis <einar@jsbeautifier.org>
4
+ #
5
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
6
+ #
7
+ # usage:
8
+ #
9
+ # if detect(some_string):
10
+ # unpacked = unpack(some_string)
11
+ #
12
+
13
+ """Unpacker for eval() based packers: runs JS code and returns result.
14
+ Works only if a JS interpreter (e.g. Mozilla's Rhino) is installed and
15
+ properly set up on host."""
16
+
17
+ from subprocess import PIPE, Popen
18
+
19
+ PRIORITY = 3
20
+
21
+ def detect(source):
22
+ """Detects if source is likely to be eval() packed."""
23
+ return source.strip().lower().startswith('eval(function(')
24
+
25
+ def unpack(source):
26
+ """Runs source and return resulting code."""
27
+ return jseval('print %s;' % source[4:]) if detect(source) else source
28
+
29
+ # In case of failure, we'll just return the original, without crashing on user.
30
+ def jseval(script):
31
+ """Run code in the JS interpreter and return output."""
32
+ try:
33
+ interpreter = Popen(['js'], stdin=PIPE, stdout=PIPE)
34
+ except OSError:
35
+ return script
36
+ result, errors = interpreter.communicate(script)
37
+ if interpreter.poll() or errors:
38
+ return script
39
+ return result
@@ -0,0 +1,58 @@
1
+ #
2
+ # simple unpacker/deobfuscator for scripts messed up with
3
+ # javascriptobfuscator.com
4
+ #
5
+ # written by Einar Lielmanis <einar@jsbeautifier.org>
6
+ # rewritten in Python by Stefano Sanfilippo <a.little.coder@gmail.com>
7
+ #
8
+ # Will always return valid javascript: if `detect()` is false, `code` is
9
+ # returned, unmodified.
10
+ #
11
+ # usage:
12
+ #
13
+ # if javascriptobfuscator.detect(some_string):
14
+ # some_string = javascriptobfuscator.unpack(some_string)
15
+ #
16
+
17
+ """deobfuscator for scripts messed up with JavascriptObfuscator.com"""
18
+
19
+ import re
20
+
21
+ PRIORITY = 1
22
+
23
+ def smartsplit(code):
24
+ """Split `code` at " symbol, only if it is not escaped."""
25
+ strings = []
26
+ pos = 0
27
+ while pos < len(code):
28
+ if code[pos] == '"':
29
+ word = '' # new word
30
+ pos += 1
31
+ while pos < len(code):
32
+ if code[pos] == '"':
33
+ break
34
+ if code[pos] == '\\':
35
+ word += '\\'
36
+ pos += 1
37
+ word += code[pos]
38
+ pos += 1
39
+ strings.append('"%s"' % word)
40
+ pos += 1
41
+ return strings
42
+
43
+ def detect(code):
44
+ """Detects if `code` is JavascriptObfuscator.com packed."""
45
+ # prefer `is not` idiom, so that a true boolean is returned
46
+ return (re.search(r'^var _0x[a-f0-9]+ ?\= ?\[', code) is not None)
47
+
48
+ def unpack(code):
49
+ """Unpacks JavascriptObfuscator.com packed code."""
50
+ if detect(code):
51
+ matches = re.search(r'var (_0x[a-f\d]+) ?\= ?\[(.*?)\];', code)
52
+ if matches:
53
+ variable = matches.group(1)
54
+ dictionary = smartsplit(matches.group(2))
55
+ code = code[len(matches.group(0)):]
56
+ for key, value in enumerate(dictionary):
57
+ code = code.replace(r'%s[%s]' % (variable, key), value)
58
+ return code
@@ -0,0 +1,86 @@
1
+ #
2
+ # deobfuscator for scripts messed up with myobfuscate.com
3
+ # by Einar Lielmanis <einar@jsbeautifier.org>
4
+ #
5
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
6
+ #
7
+ # usage:
8
+ #
9
+ # if detect(some_string):
10
+ # unpacked = unpack(some_string)
11
+ #
12
+
13
+ # CAVEAT by Einar Lielmanis
14
+
15
+ #
16
+ # You really don't want to obfuscate your scripts there: they're tracking
17
+ # your unpackings, your script gets turned into something like this,
18
+ # as of 2011-08-26:
19
+ #
20
+ # var _escape = 'your_script_escaped';
21
+ # var _111 = document.createElement('script');
22
+ # _111.src = 'http://api.www.myobfuscate.com/?getsrc=ok' +
23
+ # '&ref=' + encodeURIComponent(document.referrer) +
24
+ # '&url=' + encodeURIComponent(document.URL);
25
+ # var 000 = document.getElementsByTagName('head')[0];
26
+ # 000.appendChild(_111);
27
+ # document.write(unescape(_escape));
28
+ #
29
+
30
+ """Deobfuscator for scripts messed up with MyObfuscate.com"""
31
+
32
+ import re
33
+ import base64
34
+
35
+ # Python 2 retrocompatibility
36
+ # pylint: disable=F0401
37
+ # pylint: disable=E0611
38
+ try:
39
+ from urllib import unquote
40
+ except ImportError:
41
+ from urllib.parse import unquote
42
+
43
+ from jsbeautifier.unpackers import UnpackingError
44
+
45
+ PRIORITY = 1
46
+
47
+ CAVEAT = """//
48
+ // Unpacker warning: be careful when using myobfuscate.com for your projects:
49
+ // scripts obfuscated by the free online version call back home.
50
+ //
51
+
52
+ """
53
+
54
+ SIGNATURE = (r'["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F'
55
+ r'\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65'
56
+ r'\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75'
57
+ r'\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B'
58
+ r'\x2F\x3D","","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78'
59
+ r'\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","'
60
+ r'\x6C\x65\x6E\x67\x74\x68"]')
61
+
62
+ def detect(source):
63
+ """Detects MyObfuscate.com packer."""
64
+ return SIGNATURE in source
65
+
66
+ def unpack(source):
67
+ """Unpacks js code packed with MyObfuscate.com"""
68
+ if not detect(source):
69
+ return source
70
+ payload = unquote(_filter(source))
71
+ match = re.search(r"^var _escape\='<script>(.*)<\/script>'",
72
+ payload, re.DOTALL)
73
+ polished = match.group(1) if match else source
74
+ return CAVEAT + polished
75
+
76
+ def _filter(source):
77
+ """Extracts and decode payload (original file) from `source`"""
78
+ try:
79
+ varname = re.search(r'eval\(\w+\(\w+\((\w+)\)\)\);', source).group(1)
80
+ reverse = re.search(r"var +%s *\= *'(.*)';" % varname, source).group(1)
81
+ except AttributeError:
82
+ raise UnpackingError('Malformed MyObfuscate data.')
83
+ try:
84
+ return base64.b64decode(reverse[::-1].encode('utf8')).decode('utf8')
85
+ except TypeError:
86
+ raise UnpackingError('MyObfuscate payload is not base64-encoded.')
@@ -0,0 +1,104 @@
1
+ #
2
+ # Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier
3
+ # by Einar Lielmanis <einar@jsbeautifier.org>
4
+ #
5
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
6
+ #
7
+ # usage:
8
+ #
9
+ # if detect(some_string):
10
+ # unpacked = unpack(some_string)
11
+ #
12
+
13
+ """Unpacker for Dean Edward's p.a.c.k.e.r"""
14
+
15
+ import re
16
+ import string
17
+ from jsbeautifier.unpackers import UnpackingError
18
+
19
+ PRIORITY = 1
20
+
21
+ def detect(source):
22
+ """Detects whether `source` is P.A.C.K.E.R. coded."""
23
+ return source.replace(' ', '').startswith('eval(function(p,a,c,k,e,r')
24
+
25
+ def unpack(source):
26
+ """Unpacks P.A.C.K.E.R. packed js code."""
27
+ payload, symtab, radix, count = _filterargs(source)
28
+
29
+ if count != len(symtab):
30
+ raise UnpackingError('Malformed p.a.c.k.e.r. symtab.')
31
+
32
+ try:
33
+ unbase = Unbaser(radix)
34
+ except TypeError:
35
+ raise UnpackingError('Unknown p.a.c.k.e.r. encoding.')
36
+
37
+ def lookup(match):
38
+ """Look up symbols in the synthetic symtab."""
39
+ word = match.group(0)
40
+ return symtab[unbase(word)] or word
41
+
42
+ source = re.sub(r'\b\w+\b', lookup, payload)
43
+ return _replacestrings(source)
44
+
45
+ def _filterargs(source):
46
+ """Juice from a source file the four args needed by decoder."""
47
+ argsregex = (r"}\('(.*)', *(\d+), *(\d+), *'(.*)'\."
48
+ r"split\('\|'\), *(\d+), *(.*)\)\)")
49
+ args = re.search(argsregex, source, re.DOTALL).groups()
50
+
51
+ try:
52
+ return args[0], args[3].split('|'), int(args[1]), int(args[2])
53
+ except ValueError:
54
+ raise UnpackingError('Corrupted p.a.c.k.e.r. data.')
55
+
56
+ def _replacestrings(source):
57
+ """Strip string lookup table (list) and replace values in source."""
58
+ match = re.search(r'var *(_\w+)\=\["(.*?)"\];', source, re.DOTALL)
59
+
60
+ if match:
61
+ varname, strings = match.groups()
62
+ startpoint = len(match.group(0))
63
+ lookup = strings.split('","')
64
+ variable = '%s[%%d]' % varname
65
+ for index, value in enumerate(lookup):
66
+ source = source.replace(variable % index, '"%s"' % value)
67
+ return source[startpoint:]
68
+ return source
69
+
70
+
71
+ class Unbaser(object):
72
+ """Functor for a given base. Will efficiently convert
73
+ strings to natural numbers."""
74
+ ALPHABET = {
75
+ 62 : '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
76
+ 95 : (' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
77
+ '[\]^_`abcdefghijklmnopqrstuvwxyz{|}~')
78
+ }
79
+
80
+ def __init__(self, base):
81
+ self.base = base
82
+
83
+ # If base can be handled by int() builtin, let it do it for us
84
+ if 2 <= base <= 36:
85
+ self.unbase = lambda string: int(string, base)
86
+ else:
87
+ # Build conversion dictionary cache
88
+ try:
89
+ self.dictionary = dict((cipher, index) for
90
+ index, cipher in enumerate(self.ALPHABET[base]))
91
+ except KeyError:
92
+ raise TypeError('Unsupported base encoding.')
93
+
94
+ self.unbase = self._dictunbaser
95
+
96
+ def __call__(self, string):
97
+ return self.unbase(string)
98
+
99
+ def _dictunbaser(self, string):
100
+ """Decodes a value to an integer."""
101
+ ret = 0
102
+ for index, cipher in enumerate(string[::-1]):
103
+ ret += (self.base ** index) * self.dictionary[cipher]
104
+ return ret
@@ -0,0 +1,2 @@
1
+ # Empty file :)
2
+ # pylint: disable=C0111
@@ -0,0 +1 @@
1
+ var OO0=["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B\x2F\x3D","","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x6C\x65\x6E\x67\x74\x68"];function _1OO(_0IO){var _011=OO0[0];var lOO,O10,_0ll,OlO,_01O,IOO,I01,_001,_11O=0,Ol0=OO0[1];do{OlO=_011[OO0[3]](_0IO[OO0[2]](_11O++));_01O=_011[OO0[3]](_0IO[OO0[2]](_11O++));IOO=_011[OO0[3]](_0IO[OO0[2]](_11O++));I01=_011[OO0[3]](_0IO[OO0[2]](_11O++));_001=OlO<<18|_01O<<12|IOO<<6|I01;lOO=_001>>16&0xff;O10=_001>>8&0xff;_0ll=_001&0xff;if(IOO==64){Ol0+=String[OO0[4]](lOO);}else{if(I01==64){Ol0+=String[OO0[4]](lOO,O10);}else{Ol0+=String[OO0[4]](lOO,O10,_0ll);};};} while(_11O<_0IO[OO0[5]]);return Ol0;};function O0I(O11){var OO1=OO0[1],_11O=0;for(_11O=O11[OO0[5]]-1;_11O>=0;_11O--){OO1+=O11[OO0[2]](_11O);};return OO1;};var _0OO='=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';eval(_1OO(O0I(_0OO)));
@@ -0,0 +1,65 @@
1
+ //
2
+ // Unpacker warning: be careful when using myobfuscate.com for your projects:
3
+ // scripts obfuscated by the free online version call back home.
4
+ //
5
+
6
+ //
7
+ // Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier
8
+ // written by Einar Lielmanis <einar@jsbeautifier.org>
9
+ //
10
+ // Coincidentally, it can defeat a couple of other eval-based compressors.
11
+ //
12
+ // usage:
13
+ //
14
+ // if (P_A_C_K_E_R.detect(some_string)) {
15
+ // var unpacked = P_A_C_K_E_R.unpack(some_string);
16
+ // }
17
+ //
18
+ //
19
+
20
+ var P_A_C_K_E_R = {
21
+ detect: function (str) {
22
+ return P_A_C_K_E_R._starts_with(str.toLowerCase().replace(/ +/g, ''), 'eval(function(') ||
23
+ P_A_C_K_E_R._starts_with(str.toLowerCase().replace(/ +/g, ''), 'eval((function(') ;
24
+ },
25
+
26
+ unpack: function (str) {
27
+ var unpacked_source = '';
28
+ if (P_A_C_K_E_R.detect(str)) {
29
+ try {
30
+ eval('unpacked_source = ' + str.substring(4) + ';')
31
+ if (typeof unpacked_source == 'string' && unpacked_source) {
32
+ str = unpacked_source;
33
+ }
34
+ } catch (error) {
35
+ // well, it failed. we'll just return the original, instead of crashing on user.
36
+ }
37
+ }
38
+ return str;
39
+ },
40
+
41
+ _starts_with: function (str, what) {
42
+ return str.substr(0, what.length) === what;
43
+ },
44
+
45
+ run_tests: function (sanity_test) {
46
+ var t = sanity_test || new SanityTest();
47
+ t.test_function(P_A_C_K_E_R.detect, "P_A_C_K_E_R.detect");
48
+ t.expect('', false);
49
+ t.expect('var a = b', false);
50
+ t.expect('eval(function(p,a,c,k,e,r', true);
51
+ t.expect('eval ( function(p, a, c, k, e, r', true);
52
+
53
+ t.test_function(P_A_C_K_E_R.unpack, 'P_A_C_K_E_R.unpack');
54
+ t.expect("eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('0 2=1',3,3,'var||a'.split('|'),0,{}))",
55
+ 'var a=1');
56
+
57
+ var starts_with_a = function(what) { return P_A_C_K_E_R._starts_with(what, 'a'); }
58
+ t.test_function(starts_with_a, "P_A_C_K_E_R._starts_with(?, a)");
59
+ t.expect('abc', true);
60
+ t.expect('bcd', false);
61
+ t.expect('a', true);
62
+ t.expect('', false);
63
+ return t;
64
+ }
65
+ }