UNPKG

3.25 kBJavaScriptView Raw
1/*
2 * @see http://utf-8.jp/public/jjencode.html
3 */
4function jjencode(gv, text) {
5 var r = "";
6 var n;
7 var t;
8 var b = ["___", "__$", "_$_", "_$$", "$__", "$_$", "$$_", "$$$", "$___", "$__$", "$_$_", "$_$$", "$$__", "$$_$", "$$$_", "$$$$", ];
9 var s = "";
10
11 function f1(c) {
12 return gv + "." + b[c] + "+";
13 }
14
15 function f2(c) {
16 return gv + "." + b[parseInt(c, 16)] + "+";
17 }
18
19 for (var i = 0; i < text.length; i++) {
20 n = text.charCodeAt(i);
21 if (n == 0x22 || n == 0x5c) {
22 s += "\\\\\\" + text.charAt(i).toString(16);
23 }
24 else if ((0x21 <= n && n <= 0x2f) || (0x3A <= n && n <= 0x40) || (0x5b <= n && n <= 0x60) || (0x7b <= n && n <= 0x7f)) {
25 s += text.charAt(i);
26 }
27 else if ((0x30 <= n && n <= 0x39) || (0x61 <= n && n <= 0x66)) {
28 if (s) r += "\"" + s + "\"+";
29 r += gv + "." + b[n < 0x40 ? n - 0x30 : n - 0x57] + "+";
30 s = "";
31 }
32 else if (n == 0x6c) { // 'l'
33 if (s) r += "\"" + s + "\"+";
34 r += "(![]+\"\")[" + gv + "._$_]+";
35 s = "";
36 }
37 else if (n == 0x6f) { // 'o'
38 if (s) r += "\"" + s + "\"+";
39 r += gv + "._$+";
40 s = "";
41 }
42 else if (n == 0x74) { // 't'
43 if (s) r += "\"" + s + "\"+";
44 r += gv + ".__+";
45 s = "";
46 }
47 else if (n == 0x75) { // 'u'
48 if (s) r += "\"" + s + "\"+";
49 r += gv + "._+";
50 s = "";
51 }
52 else if (n < 128) {
53 if (s) r += "\"" + s;
54 else r += "\"";
55 r += "\\\\\"+" + n.toString(8).replace(/[0-7]/g, f1);
56 s = "";
57 }
58 else {
59 if (s) r += "\"" + s;
60 else r += "\"";
61 r += "\\\\\"+" + gv + "._+" + n.toString(16).replace(/[0-9a-f]/gi, f2);
62 s = "";
63 }
64 }
65 if (s) r += "\"" + s + "\"+";
66
67 r =
68 gv + "=~[];" +
69 gv + "={___:++" + gv + ",$$$$:(![]+\"\")[" + gv + "],__$:++" + gv + ",$_$_:(![]+\"\")[" + gv + "],_$_:++" +
70 gv + ",$_$$:({}+\"\")[" + gv + "],$$_$:(" + gv + "[" + gv + "]+\"\")[" + gv + "],_$$:++" + gv + ",$$$_:(!\"\"+\"\")[" +
71 gv + "],$__:++" + gv + ",$_$:++" + gv + ",$$__:({}+\"\")[" + gv + "],$$_:++" + gv + ",$$$:++" + gv + ",$___:++" + gv + ",$__$:++" + gv + "};" +
72 gv + ".$_=" +
73 "(" + gv + ".$_=" + gv + "+\"\")[" + gv + ".$_$]+" +
74 "(" + gv + "._$=" + gv + ".$_[" + gv + ".__$])+" +
75 "(" + gv + ".$$=(" + gv + ".$+\"\")[" + gv + ".__$])+" +
76 "((!" + gv + ")+\"\")[" + gv + "._$$]+" +
77 "(" + gv + ".__=" + gv + ".$_[" + gv + ".$$_])+" +
78 "(" + gv + ".$=(!\"\"+\"\")[" + gv + ".__$])+" +
79 "(" + gv + "._=(!\"\"+\"\")[" + gv + "._$_])+" +
80 gv + ".$_[" + gv + ".$_$]+" +
81 gv + ".__+" +
82 gv + "._$+" +
83 gv + ".$;" +
84 gv + ".$$=" +
85 gv + ".$+" +
86 "(!\"\"+\"\")[" + gv + "._$$]+" +
87 gv + ".__+" +
88 gv + "._+" +
89 gv + ".$+" +
90 gv + ".$$;" +
91 gv + ".$=(" + gv + ".___)[" + gv + ".$_][" + gv + ".$_];" +
92 gv + ".$(" + gv + ".$(" + gv + ".$$+\"\\\"\"+" + r + "\"\\\"\")())();";
93
94 return r;
95}
96
97/**
98 * 代码加密
99 *
100 * @param {string} content 文本内容
101 * @param {Object} attrs 属性
102 * @param {string} attrs.var 数据项
103 * @param {Object} scope 作用域
104 * @param {Function} scope.execImport 导入数据
105 */
106module.exports = function (content, attrs, scope) {
107 return jjencode(scope.execImport(attrs.var) || '$', content);
108};
\No newline at end of file