hiepdh-playable-toolkit 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/3x/build-inline.js +85 -0
  2. package/3x/build-templates/web-mobile/index.ejs +47 -0
  3. package/3x/extensions/super-html/README-CN.md +16 -0
  4. package/3x/extensions/super-html/dist/2x/main.js +64 -0
  5. package/3x/extensions/super-html/dist/2x/panel/index.js +66 -0
  6. package/3x/extensions/super-html/dist/3x/builder.js +8 -0
  7. package/3x/extensions/super-html/dist/3x/hooks.js +24 -0
  8. package/3x/extensions/super-html/dist/3x/main.js +27 -0
  9. package/3x/extensions/super-html/dist/3x/panel/index.js +63 -0
  10. package/3x/extensions/super-html/dist/core/build.js +58 -0
  11. package/3x/extensions/super-html/dist/core/common/cache.js +124 -0
  12. package/3x/extensions/super-html/dist/core/common/log.js +46 -0
  13. package/3x/extensions/super-html/dist/core/common/utils.js +107 -0
  14. package/3x/extensions/super-html/dist/core/config.js +71 -0
  15. package/3x/extensions/super-html/dist/core/task.js +356 -0
  16. package/3x/extensions/super-html/dist/custom_script/23x/custom-23x.js +290 -0
  17. package/3x/extensions/super-html/dist/custom_script/23x/index-23x.js +86 -0
  18. package/3x/extensions/super-html/dist/custom_script/24x/custom-24x.js +298 -0
  19. package/3x/extensions/super-html/dist/custom_script/24x/index-24x.js +87 -0
  20. package/3x/extensions/super-html/dist/custom_script/34x/custom-34x.js +244 -0
  21. package/3x/extensions/super-html/dist/custom_script/34x/index-34x.js +59 -0
  22. package/3x/extensions/super-html/dist/custom_script/javascript-obfuscator.js +9719 -0
  23. package/3x/extensions/super-html/dist/custom_script/pako.js +1462 -0
  24. package/3x/extensions/super-html/dist/test/_test.js +27 -0
  25. package/3x/extensions/super-html/i18n/en.js +5 -0
  26. package/3x/extensions/super-html/i18n/zh.js +5 -0
  27. package/3x/extensions/super-html/package-lock.json +744 -0
  28. package/3x/extensions/super-html/package.json +59 -0
  29. package/3x/extensions/super-html/static/index.html +44 -0
  30. package/3x/extensions/super-html/tsconfig.json +14 -0
  31. package/3x/plugins/exitapi.js +7 -0
  32. package/3x/plugins/facebook_api.js +31 -0
  33. package/3x/plugins/fixmraid.js +17 -0
  34. package/3x/plugins/ironsource_api.js +58 -0
  35. package/3x/plugins/mindworkapi.js +6 -0
  36. package/3x/plugins/playable-sdk.js +5 -0
  37. package/README.md +3 -3
  38. package/ironSource_api.js +86 -0
  39. package/package.json +13 -13
  40. package/setup.js +79 -50
  41. /package/{injectCustomScript.js → 3x/injectCustomScript.js} +0 -0
  42. /package/{patch-template-unityReject.js → 3x/patch-template-unityReject.js} +0 -0
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const fs = __importStar(require("fs"));
26
+ const path_1 = __importDefault(require("path"));
27
+ const mimeType = __importStar(require("mime-types"));
28
+ class default_1 {
29
+ /** 读取文件 */
30
+ static read_file_toString(filePath) {
31
+ return fs.readFileSync(filePath, { encoding: "utf-8" }).toString();
32
+ }
33
+ static read_file_base64(filePath) {
34
+ let data = fs.readFileSync(filePath);
35
+ return `data:${mimeType.lookup(filePath)};base64,${data.toString("base64")}`;
36
+ }
37
+ /** 获得文件大小 */
38
+ static get_file_size(filePath) {
39
+ return fs.statSync(filePath).size;
40
+ }
41
+ /** 获取目录下所有文件 */
42
+ static get_dir_all_file(dir) {
43
+ let files = [];
44
+ let dir_list = fs.readdirSync(dir);
45
+ dir_list.forEach((file) => {
46
+ let file_path = path_1.default.join(dir, file);
47
+ if (fs.statSync(file_path).isDirectory()) {
48
+ files = files.concat(this.get_dir_all_file(file_path));
49
+ }
50
+ else {
51
+ files.push(file_path);
52
+ }
53
+ });
54
+ return files;
55
+ }
56
+ /** 获得目录下多种格式文件 */
57
+ static get_dir_all_file_ext(dir, set) {
58
+ let files = [];
59
+ let dir_list = fs.readdirSync(dir);
60
+ dir_list.forEach((file) => {
61
+ let file_path = path_1.default.join(dir, file);
62
+ if (fs.statSync(file_path).isDirectory()) {
63
+ files = files.concat(this.get_dir_all_file_ext(file_path, set));
64
+ }
65
+ else {
66
+ let file_ext = path_1.default.extname(file_path);
67
+ if (set.has(file_ext)) {
68
+ files.push(file_path);
69
+ }
70
+ }
71
+ });
72
+ return files;
73
+ }
74
+ /** 获得目录下文件的后缀名 */
75
+ static get_dir_all_file_ext_name(dir) {
76
+ let files = [];
77
+ let dir_list = fs.readdirSync(dir);
78
+ dir_list.forEach((file) => {
79
+ let file_path = path_1.default.join(dir, file);
80
+ if (fs.statSync(file_path).isDirectory()) {
81
+ files = files.concat(this.get_dir_all_file_ext_name(file_path));
82
+ }
83
+ else {
84
+ let file_ext = path_1.default.extname(file_path);
85
+ files.push(file_ext);
86
+ }
87
+ });
88
+ return files;
89
+ }
90
+ /** 对字符去重 */
91
+ static str_unique(str) {
92
+ return [...new Set(str)].sort(function (a, b) { return a.charCodeAt(0) - b.charCodeAt(0); }).join("");
93
+ }
94
+ /** 正则过滤字符串的注释 */
95
+ static str_filter_notes(str) {
96
+ return str.replace(/\/\*(.|[\r\n])*?\*\//g, "").replace(/\/\/.*/g, "");
97
+ }
98
+ /** 获得字符串大小 kb */
99
+ static str_kb_size(str) {
100
+ return this.b_to_kb(str.length);
101
+ }
102
+ static b_to_kb(len) {
103
+ return (len / 1024).toFixed(0) + " kb";
104
+ }
105
+ }
106
+ exports.default = default_1;
107
+ ;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ const path = __importStar(require("path"));
23
+ exports.default = {
24
+ package_name: "super-html",
25
+ // debug = true 会让 min_css和min_js 都变为false
26
+ is_debug: false,
27
+ //最大大小 mb
28
+ max_size: 2,
29
+ //混淆
30
+ obfuscator: true,
31
+ //这两个是默认开启的不给用户选
32
+ is_min_css: true,
33
+ is_min_js: true,
34
+ ZIP_SCRIPT: path.join(__dirname, "..", "custom_script/pako.js"),
35
+ // web-mobile包基础路径
36
+ CUSTOM_SCRIPT: {
37
+ v23x: [
38
+ path.join(__dirname, "..", "custom_script/23x/custom-23x.js"),
39
+ path.join(__dirname, "..", "custom_script/23x/index-23x.js"),
40
+ ],
41
+ v24x: [
42
+ path.join(__dirname, "..", "custom_script/24x/custom-24x.js"),
43
+ path.join(__dirname, "..", "custom_script/24x/index-24x.js"),
44
+ ],
45
+ v34x: [
46
+ path.join(__dirname, "..", "custom_script/34x/custom-34x.js"),
47
+ path.join(__dirname, "..", "custom_script/34x/index-34x.js"),
48
+ ]
49
+ },
50
+ RES_STRING_EXTNAME_SET: new Set([
51
+ '.txt',
52
+ '.xml',
53
+ '.vsh',
54
+ '.fsh',
55
+ '.atlas',
56
+ '.tmx',
57
+ '.tsx',
58
+ '.json',
59
+ '.ExportJson',
60
+ '.plist',
61
+ '.fnt',
62
+ '.js',
63
+ ".zip"
64
+ ]),
65
+ RES_FILTER_EXTNAME_SET: new Set([
66
+ ".ico",
67
+ ".html",
68
+ ".css",
69
+ ".wasm"
70
+ ])
71
+ };
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const jszip = __importStar(require("jszip"));
26
+ const fs = __importStar(require("fs"));
27
+ const path = __importStar(require("path"));
28
+ const config_1 = __importDefault(require("./config"));
29
+ const uglify = __importStar(require("uglify-js"));
30
+ const utils_1 = __importDefault(require("./common/utils"));
31
+ const log_1 = __importDefault(require("./common/log"));
32
+ const js_obfuscator = require("../custom_script/javascript-obfuscator.js");
33
+ const clean_css = require("clean-css");
34
+ let _s_html_content = "";
35
+ //不压缩的资源
36
+ let _dict_res_no_zip = {};
37
+ //资源压缩率
38
+ let _dict_res_zip_ratio = {};
39
+ //所有资源
40
+ let l_all_path = [];
41
+ class task {
42
+ constructor(_config) {
43
+ this._config = _config;
44
+ _s_html_content = "";
45
+ _dict_res_no_zip = {};
46
+ // _config.enable_obfuscator = false;
47
+ // _config.max_size = 1024 * 1024 * 1024;
48
+ console.log("task config", _config);
49
+ }
50
+ /** 每一次重新构建,重置 */
51
+ static clear() {
52
+ l_all_path = [];
53
+ }
54
+ async build() {
55
+ let cut_size = 0;
56
+ return new Promise((resolve, reject) => {
57
+ this._step_html(this._config.path_html);
58
+ this.addJs2Html(`console.time("load html")`);
59
+ resolve({});
60
+ }).then(async () => {
61
+ //一次构建会生成多个平台,不需要每个平台都重新读取资源
62
+ if (!l_all_path || l_all_path.length === 0) {
63
+ l_all_path = utils_1.default.get_dir_all_file(this._config.path_input_dir);
64
+ for (let i = 0; i < l_all_path.length; i++) {
65
+ let filePath = l_all_path[i];
66
+ // 注意,存储时删除BASE_PATH前置
67
+ filePath = filePath.replace(/\\/g, "/");
68
+ if (config_1.default.RES_FILTER_EXTNAME_SET.has(path.extname(filePath))) {
69
+ // log.log("过滤", filePath)
70
+ l_all_path.splice(i, 1);
71
+ i--;
72
+ }
73
+ }
74
+ log_1.default.log("file count " + l_all_path.length);
75
+ await this._compression_ratio(l_all_path);
76
+ // <0表示不压缩
77
+ if (this._config.max_size >= 0) {
78
+ //计算哪些文件需要压缩
79
+ let must_size = this.get_must_size();
80
+ let size = this._config.max_size - must_size;
81
+ let list = [];
82
+ for (let k in _dict_res_zip_ratio) {
83
+ if (_dict_res_zip_ratio[k].ratio >= 1) {
84
+ _dict_res_zip_ratio[k].enable_zip = false;
85
+ size -= _dict_res_zip_ratio[k].org_size;
86
+ }
87
+ else {
88
+ list.push(_dict_res_zip_ratio[k]);
89
+ }
90
+ }
91
+ list.sort((a, b) => {
92
+ return a.ratio < b.ratio ? -1 : 1;
93
+ });
94
+ log_1.default.debug("must_size", must_size);
95
+ log_1.default.debug("size", size);
96
+ function get_size(i, temp_size) {
97
+ for (let j = i + 1; j < list.length; j++) {
98
+ temp_size -= list[j].org_size;
99
+ }
100
+ return temp_size;
101
+ }
102
+ if (get_size(-1, size) < 0) {
103
+ //每次寻找压缩率最大的文件
104
+ for (let i = 0; i < list.length; i++) {
105
+ size -= list[i].zip_size;
106
+ log_1.default.debug("size", size, list[i].key, list[i].zip_size);
107
+ list[i].enable_zip = true;
108
+ if (get_size(i, size) >= 0) {
109
+ break;
110
+ }
111
+ }
112
+ }
113
+ let len = 0;
114
+ let cut_all_size = 0;
115
+ for (let k in list) {
116
+ if (list[k].enable_zip) {
117
+ len++;
118
+ cut_size += list[k].cut_size;
119
+ log_1.default.debug("enable_zip", list[k].enable_zip, list[k].key);
120
+ }
121
+ cut_all_size += list[k].cut_size;
122
+ }
123
+ log_1.default.log("zip file count " + Object.keys(_dict_res_zip_ratio).length);
124
+ log_1.default.log("zip file count " + len);
125
+ log_1.default.log("zip cut size " + utils_1.default.b_to_kb(cut_size) + " / " + utils_1.default.b_to_kb(cut_all_size));
126
+ }
127
+ }
128
+ return Promise.resolve();
129
+ }).then(async () => {
130
+ return this._step_res(l_all_path);
131
+ }).then(() => {
132
+ let content = JSON.stringify(_dict_res_no_zip);
133
+ content = `window.__res=${content};`;
134
+ this.addJs2Html(content);
135
+ return this._step_script();
136
+ }).then(() => {
137
+ fs.writeFileSync(this._config.path_out_file, _s_html_content);
138
+ log_1.default.log(`complete size ` + utils_1.default.str_kb_size(_s_html_content) + " / " + utils_1.default.b_to_kb(_s_html_content.length + cut_size));
139
+ log_1.default.log("success: " + this._config.path_out_file);
140
+ }).catch((err) => {
141
+ log_1.default.error(err, err.message);
142
+ throw err;
143
+ });
144
+ }
145
+ async _step_html(path_html) {
146
+ // html
147
+ _s_html_content = utils_1.default.read_file_toString(path_html);
148
+ //提取html中的css文件
149
+ var reg = /type="text\/css" href="(.*)"/;
150
+ let path_css = null;
151
+ try {
152
+ const list = reg.exec(_s_html_content);
153
+ if (list && list[1]) {
154
+ path_css = path.join(this._config.path_input_dir, list[1].trim());
155
+ }
156
+ }
157
+ catch (error) {
158
+ log_1.default.error("未识别到html中的css文件,可能会有异常");
159
+ }
160
+ _s_html_content = _s_html_content.replace(/ *<!--.*-->/g, "");
161
+ _s_html_content = _s_html_content.replace(/<link rel="stylesheet".*\/>/gs, "");
162
+ _s_html_content = _s_html_content.replace(/<script.*<\/script>/gs, "");
163
+ //正则删除空行
164
+ _s_html_content = _s_html_content.replace(/\n\s*\n/g, "\n");
165
+ // css
166
+ if (!path_css) {
167
+ return;
168
+ }
169
+ let content = this.red_css(path_css);
170
+ _s_html_content = _s_html_content.replace(/<\/head>/, `${content}\n</head>`);
171
+ }
172
+ /** 计算压缩率 */
173
+ async _compression_ratio(l_path) {
174
+ _dict_res_zip_ratio = {};
175
+ return new Promise((resolve, reject) => {
176
+ const inputPath = this._config.path_input_dir.replace(/\\/g, "/").replace("./", "");
177
+ let i_task = 0;
178
+ l_path.forEach(filePath => {
179
+ i_task++;
180
+ var zips = new jszip.default();
181
+ filePath = filePath.replace(/\\/g, "/");
182
+ // 注意,存储时删除BASE_PATH前置
183
+ let store_path = filePath.replace(new RegExp(`[.]*${inputPath}/`), "");
184
+ let value;
185
+ if (path.extname(filePath) == ".js") {
186
+ value = this.get_js(filePath);
187
+ }
188
+ else if (config_1.default.RES_STRING_EXTNAME_SET.has(path.extname(filePath))) {
189
+ value = utils_1.default.read_file_toString(filePath);
190
+ }
191
+ else {
192
+ value = utils_1.default.read_file_base64(filePath);
193
+ }
194
+ zips.file(store_path, value, { compression: "DEFLATE" });
195
+ zips.generateAsync({ type: "nodebuffer" }).then((content) => {
196
+ let str_base64 = Buffer.from(content).toString("base64");
197
+ let ratio = Number((str_base64.length / value.length).toFixed(2));
198
+ _dict_res_zip_ratio[store_path] = {
199
+ key: store_path,
200
+ ratio: ratio,
201
+ org_size: value.length,
202
+ zip_size: str_base64.length,
203
+ cut_size: value.length - str_base64.length,
204
+ enable_zip: false
205
+ };
206
+ i_task--;
207
+ if (i_task <= 0) {
208
+ resolve({});
209
+ }
210
+ });
211
+ });
212
+ });
213
+ }
214
+ async _step_res(l_path) {
215
+ await new Promise((resolve, reject) => {
216
+ var zips = new jszip.default();
217
+ const inputPath = this._config.path_input_dir.replace(/\\/g, "/").replace("./", "");
218
+ l_path.forEach(filePath => {
219
+ filePath = filePath.replace(/\\/g, "/");
220
+ // 注意,存储时删除BASE_PATH前置
221
+ let store_path = filePath.replace(new RegExp(`[.]*${inputPath}/`), "");
222
+ let value;
223
+ if (path.extname(filePath) == ".js") {
224
+ value = this.get_js(filePath);
225
+ }
226
+ else if (config_1.default.RES_STRING_EXTNAME_SET.has(path.extname(filePath))) {
227
+ value = utils_1.default.read_file_toString(filePath);
228
+ }
229
+ else {
230
+ value = utils_1.default.read_file_base64(filePath);
231
+ }
232
+ if (!_dict_res_zip_ratio[store_path].enable_zip) {
233
+ _dict_res_no_zip[store_path] = value;
234
+ }
235
+ else {
236
+ zips.file(store_path, value, { compression: "DEFLATE" });
237
+ }
238
+ });
239
+ if (Object.keys(zips.files).length) {
240
+ //导入库
241
+ this.addJs2Html(this._get_zip_script());
242
+ zips.generateAsync({ type: "nodebuffer" }).then((content) => {
243
+ let str_base64 = Buffer.from(content).toString("base64");
244
+ str_base64 = `var __zip = "${str_base64}";`;
245
+ this.addJs2Html(str_base64);
246
+ resolve({});
247
+ });
248
+ }
249
+ else {
250
+ resolve({});
251
+ }
252
+ });
253
+ }
254
+ //获得压缩库
255
+ _get_zip_script() {
256
+ return utils_1.default.read_file_toString(config_1.default.ZIP_SCRIPT);
257
+ }
258
+ //获得自定义脚本
259
+ _get_custom_script() {
260
+ let contents = "";
261
+ this._config.l_custom_script.forEach(filePath => {
262
+ const content = this.get_js(filePath, false);
263
+ contents += "(function(){" + content + "})();";
264
+ });
265
+ return contents;
266
+ }
267
+ async _step_script() {
268
+ this.addJs2Html(this._get_custom_script());
269
+ }
270
+ red_css(filePath) {
271
+ let css = utils_1.default.read_file_toString(filePath);
272
+ //提取html中的css文件
273
+ var reg = /url\((.*)\)/;
274
+ try {
275
+ const list = reg.exec(css);
276
+ if (list && list[1]) {
277
+ const trim = list[1].trim();
278
+ const base64 = utils_1.default.read_file_base64(path.join(this._config.path_input_dir, trim));
279
+ css = css.replace(trim, base64);
280
+ }
281
+ }
282
+ catch (error) {
283
+ log_1.default.log("no find css", error);
284
+ }
285
+ if (config_1.default.is_min_css) {
286
+ css = new clean_css().minify(css).styles;
287
+ }
288
+ return `<style>\n${css}</style>`;
289
+ }
290
+ /** 将js文件转化为html文件内容(包括压缩过程) */
291
+ get_js(filePath, bReplaceJs = true) {
292
+ let js = utils_1.default.read_file_toString(filePath);
293
+ while (true) {
294
+ if (bReplaceJs) {
295
+ js = js.replace(/new XMLHttpRequest/g, "new _XMLLocalRequest");
296
+ js = js.replace(/document.createElement\(['"]script['"]\)/g, "_createLocalJSElement()");
297
+ }
298
+ if (js.length > 1024 * 500) {
299
+ break;
300
+ }
301
+ if (filePath.indexOf("min.js") != -1) {
302
+ break;
303
+ }
304
+ if (this._config.enable_obfuscator) {
305
+ log_1.default.debug("obfuscator", filePath, js.length);
306
+ const result = js_obfuscator.obfuscate(js, {
307
+ compact: true,
308
+ controlFlowFlattening: false,
309
+ deadCodeInjection: false,
310
+ debugProtection: false,
311
+ debugProtectionInterval: false,
312
+ disableConsoleOutput: false,
313
+ identifierNamesGenerator: 'mangled',
314
+ log: false,
315
+ numbersToExpressions: false,
316
+ renameGlobals: false,
317
+ /** 保留标识符,让其不被混淆,支持正则表达式。 */
318
+ reservedNames: [],
319
+ rotateStringArray: true,
320
+ selfDefending: false,
321
+ shuffleStringArray: true,
322
+ simplify: true,
323
+ splitStrings: false,
324
+ stringArray: true,
325
+ stringArrayEncoding: [],
326
+ stringArrayIndexShift: true,
327
+ stringArrayWrappersCount: 1,
328
+ stringArrayWrappersChainedCalls: true,
329
+ stringArrayWrappersParametersMaxCount: 2,
330
+ stringArrayWrappersType: 'variable',
331
+ stringArrayThreshold: 0.75,
332
+ unicodeEscapeSequence: false
333
+ });
334
+ js = result.getObfuscatedCode();
335
+ }
336
+ else {
337
+ if (config_1.default.is_min_js) {
338
+ log_1.default.debug("minify", filePath, js.length);
339
+ var options = {};
340
+ js = uglify.minify(js, options).code;
341
+ }
342
+ }
343
+ break;
344
+ }
345
+ return js;
346
+ }
347
+ addJs2Html(content) {
348
+ content = `<script type="text/javascript">\n${content}\n</script>`;
349
+ _s_html_content = _s_html_content.replace("</body>", () => `${content}\n</body>`);
350
+ }
351
+ /** 获得必须的文件大小 */
352
+ get_must_size() {
353
+ return this._get_custom_script().length + this._get_zip_script().length + _s_html_content.length;
354
+ }
355
+ }
356
+ exports.default = task;