forked from gudqs7/wxappUnpacker
-
Notifications
You must be signed in to change notification settings - Fork 56
/
wuJs.js
58 lines (55 loc) · 2.25 KB
/
wuJs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
const wu = require("./wuLib.js");
const path = require("path");
const UglifyJS = require("uglify-es");
const {js_beautify} = require("js-beautify");
const {VM} = require('vm2');
function jsBeautify(code) {
return UglifyJS.minify(code, {mangle: false, compress: false, output: {beautify: true, comments: true}}).code;
}
function splitJs(name, cb, mainDir) {
let isSubPkg = mainDir && mainDir.length > 0;
let dir = path.dirname(name);
if (isSubPkg) {
dir = mainDir;
}
wu.get(name, code => {
let needDelList = {};
let vm = new VM({
sandbox: {
require() {
},
define(name, func) {
let code = func.toString();
code = code.slice(code.indexOf("{") + 1, code.lastIndexOf("}") - 1).trim();
let bcode = code;
if (code.startsWith('"use strict";') || code.startsWith("'use strict';")) code = code.slice(13);
else if ((code.startsWith('(function(){"use strict";') || code.startsWith("(function(){'use strict';")) && code.endsWith("})();")) code = code.slice(25, -5);
let res = jsBeautify(code);
if (typeof res == "undefined") {
console.log("Fail to delete 'use strict' in \"" + name + "\".");
res = jsBeautify(bcode);
}
console.log(dir, name);
needDelList[path.resolve(dir, name)] = -8;
wu.save(path.resolve(dir, name), jsBeautify(res));
},
definePlugin() {
},
requirePlugin() {
}
}
});
if (isSubPkg) {
code = code.slice(code.indexOf("define("));
}
console.log('splitJs: ' + name);
vm.run(code);
console.log("Splitting \"" + name + "\" done.");
if (!needDelList[name]) needDelList[name] = 8;
cb(needDelList);
});
}
module.exports = {jsBeautify: jsBeautify, wxsBeautify: js_beautify, splitJs: splitJs};
if (require.main === module) {
wu.commandExecute(splitJs, "Split and beautify weapp js file.\n\n<files...>\n\n<files...> js files to split and beautify.");
}